json - 如何使用 Codable 协议(protocol)解析带有自定义参数的 JSON

标签 json swift codable decodable

我有一个带有 key 的 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协议(protocol)进行解析

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)
            }
        }

最佳答案

我打赌你正在做这样的事情:

let jsonString = """
{
"yearOfManufacture": "20/9/2018",
"carSize": 8,
"isNew": true,
"carAssets": [
{
"color": "5761807993001",
"nativeId": "{\"app\":\"1234/Car/Native_App\",\"web\":\" /8888/Car/Native_Car_Desktop\"}"
}
]
}
"""

在多行字符串中,\""都表示字符"。所以你必须写\\" 获取两个字符 \":

let jsonString = """
{
"yearOfManufacture": "20/9/2018",
"carSize": 8,
"isNew": true,
"carAssets": [
{
"color": "5761807993001",
"nativeId": "{\\"app\\":\\"1234/Car/Native_App\\",\\"web\\":\\" /8888/Car/Native_Car_Desktop\\"}"
}
]
}
"""

关于json - 如何使用 Codable 协议(protocol)解析带有自定义参数的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50624614/

相关文章:

swift - 在动态类型/对象上使用 Codable

javascript - 如何通过 Javascript 或 JQuery 异步获取多个 JSON

android - 有时我得到不同的字符串 key :Value in Json Array

ios - 带有重定向 URL 的 UIImageView 不起作用

ios - 是否可以创建 NSFetchedResultsController 来获取特定属性具有不同值的所有实体?

ios - 可编码的 API 请求

swift - 使用 "Codable"设置属性值不能通过继承工作

java - 解码 JsonNode 更改数据类型

java - 在java8 Collectors.toMap中,keyMapper值应该来自另一个常量映射的键

ios - NSData 到 UIImage 返回到 NSData 结果长度大小增加了三倍