【问题标题】:How to parse JSON with custom parameters using Codable protocol如何使用 Codable 协议解析带有自定义参数的 JSON
【发布时间】: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


【解决方案1】:

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

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\\"}"
}
]
}
"""

【讨论】:

  • 是的,这就是问题所在,如果我们从文件或网络服务中获取,如何解决
  • @salmansiddiqui 你不必担心它,假设服务正确格式化了他们的 JSON。只有在字符串文字中,您需要小心转义字符。
猜你喜欢
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多