为什么#Codable#在下面的代码中不起作用?

时间:2018-07-06 13:33:12

标签: json swift codable jsondecoder

我有以下代码来测试Codable协议和JSONDecoder

import UIKit

class ClassA: Codable {
    var age: Int = 1
}

class ClassB: Codable {
    var ageInfo: ClassA?
    var name: String
}

let json4 = """
{
    "ageInfo": {},
    "name": "Jack"
}
""".data(using: .utf8)!

do {
    let d = try JSONDecoder().decode(ClassB.self, from: json4)
} catch let err {
    print(err)
}

我的问题是,为什么 json4 无法解码?或如何解码 json4

2 个答案:

答案 0 :(得分:1)

age中的

ClassA被声明为非可选,因此该密钥是必需的,但是在JSON ageInfo中为空。

错误是

  

与键CodingKeys(stringValue:“ age”)无关的值

age声明为可选

var age: Int?

或将键值对插入JSON

{
    "ageInfo": {"age" : 1},
    "name": "Jack"
}

答案 1 :(得分:1)

您的ClassB有此内容:

var ageInfo: ClassA?

但这不能帮助您使用此JSON:

"ageInfo": {}

问题是ageInfo存在 ,但它也是 empty 词典。因此,有 个ClassA,但是它与您对ClassA的定义不符!

更改

class ClassA: Codable {
    var age: Int = 1
}

class ClassA: Codable {
    var age: Int? = 1
}