-1

我有下面的代码来测试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

4

2 回答 2

1

ageinClassA被声明为非可选的,因此密钥是必需的,但在 JSONageInfo中为空。

错误是

没有与键 CodingKeys(stringValue: "age") 关联的值

要么声明age为可选

var age: Int?

或者在 JSON 中插入键值对

{
    "ageInfo": {"age" : 1},
    "name": "Jack"
}
于 2018-07-07T07:04:39.990 回答
1

你的 ClassB 有这个:

var ageInfo: ClassA?

但这对这个 JSON 没有帮助:

"ageInfo": {}

问题是ageInfo存在但它也是一个字典。所以有一个ClassA 但它不符合您对 ClassA 的定义!

改变

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

class ClassA: Codable {
    var age: Int? = 1
}
于 2018-07-07T07:05:10.600 回答