我有来自 Yandex 的以下 JSON 响应:
{
"def" : [
{
"pos" : "adverb",
"text" : "ganz",
"tr" : [
{
"pos" : "noun",
"text" : "whole",
"mean" : [
{
"text" : "gesamte"
}
]
},
{
"syn" : [
{
"pos" : "adverb",
"text" : "totally"
},
{
"pos" : "adverb",
"text" : "really"
},
{
"pos" : "adverb",
"text" : "absolutely"
}
],
"mean" : [
{
"text" : "ziemlich"
},
{
"text" : "völlig"
},
{
"text" : "wirklich"
},
{
"text" : "absolut"
}
],
"pos" : "adverb",
"text" : "quite"
},
{
"pos" : "adjective",
"text" : "very",
"mean" : [
{
"text" : "sehr"
}
]
},
{
"syn" : [
{
"pos" : "adverb",
"text" : "perfectly"
}
],
"mean" : [
{
"text" : "vollständig"
},
{
"text" : "vollkommen"
}
],
"pos" : "adverb",
"text" : "fully"
},
{
"pos" : "noun",
"text" : "altogether",
"mean" : [
{
"text" : "insgesamt"
}
]
}
]
},
{
"pos" : "adjective",
"text" : "ganz",
"tr" : [
{
"pos" : "verb",
"text" : "complete",
"mean" : [
{
"text" : "vollständig"
}
]
}
]
}
],
"head" : {
}
}
我想把它巧妙地解析成这种格式:
struct Definition {
var pos: String
var text: String
var translations: [Translation]
var examples: [Example]
}
struct Translation {
var pos: String
var text: String
var synonyms: [Synonym]
var meanings: [Meaning]
}
struct Synonym {
var pos: String
var text: String
}
struct Meaning {
var text: String
}
struct Example {
}
但是,我不知道如何巧妙地做到这一点。目前我只是嵌套了大量的 for 循环:
if let value = response.result.value {
let json = JSON(value)["def"]
for (key, subJson) in json {
for (key, subJson) in subJson {
print(key)
print(subJson)
}
}
}
它很丑而且可读性差。我正在使用 SwiftyJSON
。有没有一种简单的方法来解析我缺少的这个 JSON(数组和字典的混合体)?
谢谢
编辑:明确地说,我想要一个适用于所有响应的解决方案,而不仅仅是给定的示例
最佳答案
解析 JSON 并没有更聪明的方法来做到这一点。后端采用这样的结构,因为它很有意义。所以,去吧。
顺便说一句,它的结构有点复杂。在 Swift 中,总是建议使用类型注解。否则,如果您使用推理,它会让编译器疯狂地试图找出您的类型。编译时间会加起来。
关于ios - 解析复杂 JSON 数组的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34384166/