Как проанализировать JSON с пользовательскими параметрами, используя протокол Codable - PullRequest
0 голосов
/ 31 мая 2018

У меня есть 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)
            }
        }

1 Ответ

0 голосов
/ 31 мая 2018

Могу поспорить, что вы делаете что-то вроде этого:

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