Swift解析JSON,嵌套数组

时间:2019-10-17 00:44:49

标签: json swift nested

{
 "def": [
    {
      "sseq": [
        [
          [
             "sense",
           {
             "sn": "1",
             "dt": [
                [
                  "text",
                  "{bc}a set of the equipment used in a particular activity {bc}{sx|gear||} "
                ],
                [
                  "vis",
                  [
                    {
                      "t": "fishing {wi}tackle{/wi}"
                    }
                  ]
                ]
              ]
            }
          ]
        ]
      ]
    }
  ]
}

arrow functions

我在解析带有嵌套数组的JSON时遇到麻烦。我试图获得“ dt”中“文本”下的定义。当前的输出是这样的,而我只是想得到以下定义:

["text", "{bc}to emit puffs (as of breath or steam)"]
["text", "{bc}to make empty threats {bc}{sx|bluster||}"]
["text", "{bc}to react or behave indignantly"]
 for result in jsonArray {
                        if let def = result["def"] as? JsonArray {
                            for defItem in def {
                                //print(defItem)
                                if let sseq = defItem["sseq"] as? [Any] {
                                    for _1 in sseq {
                                        if let _1arr = _1 as? [Any] {
                                            for _2 in _1arr {
                                                if let _2arr = _2 as? [Any] {
                                                    for _3 in _2arr {
                                                        if let res = _3 as? JsonDict {
                                                            if let definitions = res["dt"] as? [[String]] {

                                                                print(definitions[0])

                                                            }

1 个答案:

答案 0 :(得分:0)

正如@Robert指出的那样,此JSON放在错误的位置。作为一项有趣的思想练习,您可以执行以下操作。

格式化的json:

{
   "def":[
      {
         "sseq":[
            [
               [
                  "sense",
                  {
                     "sn":"1",
                     "dt":[
                        [
                           "text",
                           "{bc}a set of the equipment used in a particular activity {bc}{sx|gear||} "
                        ],
                        [
                           "vis",
                           [
                              {
                                 "t":"fishing {wi}tackle{/wi}"
                              }
                           ]
                        ]
                     ]
                  }
               ]
            ]
         ]
      }
   ]
}

满足Swift Codable:

let woah = try? newJSONDecoder().decode(Woah.self, from: jsonData)

// MARK: - Woah
struct Woah {
    let def: [Def]
}

// MARK: - Def
struct Def {
    let sseq: [[[SseqElement]]]
}

enum SseqElement {
    case sseqClass(SseqClass)
    case string(String)
}

// MARK: - SseqClass
struct SseqClass {
    let sn: String
    let dt: [[DtUnion]]
}

enum DtUnion {
    case dtClassArray([DtClass])
    case string(String)
}

// MARK: - DtClass
struct DtClass {
    let t: String
}