Ekr*_*kra 7 json ios swift codable decodable
我有一个使用解析JSON的结构Codable.
struct Student: Codable {
let name: String?
let amount: Double?
let adress: String?
}
Run Code Online (Sandbox Code Playgroud)
现在,如果金额值为空,则JSON解析失败.
那么我应该手动处理结构中存在的所有Int和空的情况吗?DoubleStudent
将String自动处理作为null 的值.
Vin*_* GH 15
正在浏览 Codable 并遇到了这个问题。
因此,在这里要非常清楚,如果 JSON/响应将包含null作为值,则将其解释为nil. 因此,出于这个原因,可能包含的模型属性之一null应标记为可选。
例如,考虑下面的 JSON 响应,
{
"name": "Steve",
"amount": null,
"address": "India"
}
Run Code Online (Sandbox Code Playgroud)
模型应该如下,cosamount正在返回null。
struct Student: Codable {
let name: String
let amount: Double?
let address: String
}
Run Code Online (Sandbox Code Playgroud)
Suggestion:如果您要编写init(from decoder: Decoder) throws,请始终使用如下所示的内容作为可选属性。
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
amount = try values.decodeIfPresent(String.self, forKey: .amount)
//so on...
}
Run Code Online (Sandbox Code Playgroud)
即使您添加do-catch块,try? decoder....如果失败也可以捕获。希望这很清楚!!即使模型包含 5 个或更多具有某些包含null值的属性,它也很简单但很难找到问题
Pat*_*tru 10
让我为你做这个游乐场,因为一个例子向你展示了超过一百个单词:
import Cocoa
struct Student: Codable {
let name: String?
let amount: Double?
let adress: String?
}
let okData = """
{
"name": "here",
"amount": 100.0,
"adress": "woodpecker avenue 1"
}
""".data(using: .utf8)!
let decoder = JSONDecoder()
let okStudent = try decoder.decode(Student.self, from:okData)
print(okStudent)
let nullData = """
{
"name": "there",
"amount": null,
"adress": "grassland 2"
}
""".data(using: .utf8)!
let nullStudent = try decoder.decode(Student.self, from:nullData)
print(nullStudent)
Run Code Online (Sandbox Code Playgroud)
null如果使用选项定义结构,则处理得很好.但是,如果你能避免,我会反对它.斯威夫特提供了我所知道的最好的支持,帮助我不要忘记处理nil任何可能发生的案件,但他们仍然是痛苦的屁股.
| 归档时间: |
|
| 查看次数: |
9776 次 |
| 最近记录: |