提问人:Stee Ve 提问时间:11/24/2022 更新时间:11/24/2022 访问量:145
如何使用 Swift 解码嵌套的 Json?
How to decode nested Json with Swift?
问:
我一直在尝试解码这个 Json 数据,但我无法完全做到这一点: 这是我的示例json数据:
{
"id": 10644,
"name": "CP2500",
"numberOfConnectors": 2,
"connectors": [
{
"id": 59985,
"name": "CP2500 - 1",
"maxchspeed": 22.08,
"connector": 1,
"description": "AVAILABLE"
},
{
"id": 59986,
"name": "CP2500 - 2",
"maxchspeed": 22.08,
"connector": 2,
"description": "AVAILABLE"
}
]
}
这是我的结构: `
struct Root: Codable {
var id: Int
var name: String
var numberOfConnectors: Int
var connectors: [Connector]
}
struct Connector: Codable {
var id: Int
var name: String
var maxchspeed: Double
var connector: Int
var connectorDescription: String
enum CodingKeys: String, CodingKey {
case id, name, maxchspeed, connector
case connectorDescription = "description"
}
}
我想解析 [Connector] 数组中的元素,但我只是得到了 Root 级别的元素:
let jsonData = array.data(using: .utf8)!
let root = try JSONDecoder().decode(Root.self, from: jsonData)
print("\(root.id)")
知道该怎么做吗?
答:
0赞
Stee Ve
11/24/2022
#1
do {
let root = try JSONDecoder().decode(Root.self, from: jsonData)
print("root id : \(root.id)")
root.connectors.forEach {
print("name : \($0.name),"," connector id : \($0.id),","status : \($0.description)");
}
} catch {
print(error.localizedDescription)
}
评论
1赞
Larme
11/24/2022
旁注:避免使用 for ,尤其是在 上,因为它可能会跳过有关调试的重要信息。更喜欢使用。您可以简单地通过替换为 来查看,您将看到有关实际错误的有用信息。print(error.localizedDescription)
try
JSONDecoder
print(error)
var id: Int
var id: String
评论
array
Connector
let connectors = try JSONDecoder().decode(Root.self, from: jsonData).connectors
root.connectors.connectorDescription
确实行不通,因为它没有意义。 是 的 数组,因此它没有属性。只有该数组的元素才具有该属性。您需要遍历该数组的元素。root.connectors
Connector
connectorDescription
Connector