ios - 解析复杂 JSON 数组的有效方法

标签 ios json swift

我有来自 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/

相关文章:

ios - UIImagePickerController 可以直接在 Story Board 上使用吗?

ios - 在 tableViewCell 中使用 segue 传递数据

ios - 无法调用非函数类型 DateCallBack 的值

c - 如何用 Parson 构造 JSON 数组?

javascript - 跟踪具有动态(变化的)数组大小的 JSON 字符串

javascript - Jekyll 破坏 JSON 文件。箭头 ("=>")而不是 ":"

ios - 如何将在 Open Gl ES 中创建的图像放入 iOS 的 UIView

swift - 覆盖自定义 TabBar 的属性?

swift - 数学符号作为函数参数

ios - 如何将Core Data与Ensembles Framework同步?