【发布时间】:2018-11-10 11:38:59
【问题描述】:
我有一个带键的 JSON
{
"yearOfManufacture":"20/9/2018",
"carSize":8,
"isNew":true,
"carAssets":[
{
"color":"5761807993001",
"nativeId":"{\"app\":\"1234/Car/Native_App\",\"web\":\" /8888/Car/Native_Car_Desktop\"}"
}
]
}
我正在尝试使用带有结构模型的 Codable 协议进行解析
struct Cars: Codable {
var yearOfManufacture: String?
var carSize: Int = 0
var isNew: Bool = true
var carAssets: [CarAssests]?
}
struct CarAssests: Codable {
var color: String?
var nativeId: String?
}
我收到类似 无法读取数据,因为它的格式不正确。我尝试将 CodingKeys 与解码器容器一起使用,但没有得到 "nativeId 的确切类型": "{\"app\":\"1234/Car/Native_App\",\"web\":\" /8888/Car/Native_Car_Desktop\"}" 没有得到确切的数据类型。
let decoder = JSONDecoder()
decoder.dataDecodingStrategy = .deferredToData
if let jsonData = jsonString.data(using: .utf8) {
do {
print(jsonData)
let assets = try decoder.decode(Cars.self, from: jsonData)
print(assets)
} catch {
print(error.localizedDescription)
}
}
【问题讨论】:
-
“如果我删除 nativeId 密钥”是什么意思?
-
如果我从 JSON 中删除 nativeId,它会被成功解析!!
-
nativeId 是一个 JSON 字符串,编码为 JSON。它不会以相同的方式进行解析,您需要手动对其进行排序
-
我需要编码完整的 JSON 还是只需要密钥
-
你能出示
jsonString的声明吗?您是从文件中读取它还是使用多行字符串文字?
标签: json swift codable decodable