我有以下代码来测试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 ?
答案 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
}