我一直在尝试从后端系统解码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)的名称和数量是可变的并且未知。我相信这些节点的正确名称是“动态编码键”,这就是为什么不能使用枚举的原因。
子节点位于数组中,并且始终共享相同的结构。它们的数量是未知的,并且对于每个顶级节点可能不同(例如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)
答案 0 :(得分:0)
您需要
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)!
答案 1 :(得分:-1)
Sh_Khan提供的解决方案有效。
let res = try? JSONDecoder().decode([String:[Inst]],from:data)
struct Inst: Codable {
let symbol: String
let id, ltd: Int
}
感谢您的输入。