我知道其他问题已经涵盖了这一点,但我已经关注了它们,但我仍然感到困惑。这是我的 JSON 结构:
{
"FindBoatResult": {
"num_boats": 10,
"boat": [
{
"num_segments": 1,
"segments": [
{
"ident": "String",
"origin" : {
"code" : "String"
},
},
]
}
等等...但这与结构一样深。每个 JSON 响应中有多个“段”返回。在 Swift 中,我有这段代码。
struct Result : Decodable {
let FindBoatResult : FindBoatResult
}
struct FindBoatResult : Decodable {
let boats : Boats
let num_boats : Int
}
struct Boats : Decodable {
let segments : [Segments]
}
struct Segments : Decodable {
let ident : String?
let origin : Origin
}
struct Origin : Decodable {
let code : String
}
func getBoats() {
let urlString = "http://myApi"
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else {return}
let dataAsString = String(data: data, encoding: .utf8)
//print(dataAsString)
do {
let boats = try
JSONDecoder().decode(FindBoatResult.self, from: data)
print(boats)
} catch {
print(err)
}
}.resume()
}
这会失败并抛出 err 但 err 打印为 nil.. 所以我不知道我错过了什么。 dataAsString 按预期打印出 JSON,所以我知道“数据”是好的。
最佳答案
我发现了几个小问题。尝试替换这个:
struct FindBoatResult: Decodable {
let boats: Boats
let num_boats: Int
}
struct Boats: Decodable {
let segments: [Segments]
}
与:
struct FindBoatResult: Decodable {
let boat: [Boat]
let num_boats: Int
}
struct Boat: Decodable {
let segments: [Segments]
}
最后,使用 Result
类型(不是 FindBoatResult
)解码:
JSONDecoder().decode(Result.self, from: data)
关于ios - Swift 4 JSON 解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46965513/