簡體   English   中英

如何解碼 Swift 中的動態嵌套 JSON

[英]How to decode dynamic nested JSON in Swift

我一直在嘗試從后端系統解碼 JSON。

    {
        "Inst1": [
            {
                "symbol": "Inst1",
                "id": 357200929,
                "ltd": 20191220
            },
            {
                "symbol": " Inst1",
                "id": 357200932,
                "ltd": 20191220
            },
            {…}
        ],
        "Inst2": [
            {
                "symbol": "Inst2",
                "id": 357201388,
                "ltd": 20191220
            },
            {
                "symbol": "Inst2",
                "id": 371886725,
                "ltd": 20200320
            }
        ]
    }

頂級節點(Inst1、Inst2)的名稱和數量是可變的且未知的。 我相信這些節點的正確名稱是“Dynamic Coding Keys”,這就是不能使用枚舉的原因。

子節點在一個數組中,並且總是共享相同的結構。 它們的數量是未知的,並且對於每個頂級節點可能不同(例如,inst1 可能有 10 個子節點,但 Inst2 可以有 5 個)。

我正在努力尋找解碼/編碼此類回復的正確方法。 任何幫助將不勝感激。 謝謝

按照 Sh_Khan 的回答,我嘗試了下面的代碼,但它不起作用。

var json = """
{
      "Inst1": [
          {
              "symbol": "Inst1",
              "id": 357200929,
              "ltd": 20191220
          },
          {
              "symbol": " Inst1",
              "id": 357200932,
              "ltd": 20191220
          }
      ],
      "Inst2": [
          {
              "symbol": "Inst2",
              "id": 357201388,
              "ltd": 20191220
          },
          {
              "symbol": "Inst2",
              "id": 371886725,
              "ltd": 20200320
          }
      ]
  }
""".data(using: .utf8)!

struct Inst: Codable {
  let symbol: String
  let id, ltd: Int
}

let result = try? JSONDecoder().decode([String:[Inst]].self,from: json)

你需要

let res = try? JSONDecoder().decode([String:[Inst]],from:data)


struct Inst: Codable {
  let symbol: String
  let id, ltd: Int
}

正確 json

    var json = """
    {
          "Inst1": [
              {
                  "symbol": "Inst1",
                  "id": 357200929,
                  "ltd": 20191220
              },
              {
                  "symbol": " Inst1",
                  "id": 357200932,
                  "ltd": 20191220
              }
          ],
          "Inst2": [
              {
                  "symbol": "Inst2",
                  "id": 357201388,
                  "ltd": 20191220
              },
              {
                  "symbol": "Inst2",
                  "id": 371886725,
                  "ltd": 20200320
              }
          ]
      }
    """.data(using: .utf8)!

Sh_Khan 提供的解決方案有效。

let res = try? JSONDecoder().decode([String:[Inst]],from:data)


struct Inst: Codable {
  let symbol: String
  let id, ltd: Int
}

感謝您的輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM