Разбор JSON с использованием codable и CodingKeys swift - PullRequest
0 голосов
/ 01 мая 2020

Я пытался решить со многими учебниками, но не смог.

У меня есть JSON структура, подобная этой.

    {
"Region":[
   {
      "head":[
         {
            "total_count":572888
         },
         {
            "RESULT":{
               "CODE":"000",
               "MESSAGE":"Success."
            }
         },
         {
            "api_version":"1.0"
         }
      ]
   },
   {
      "row":[
         {
            "COM_NAME":"company",
            "TYPE_CD":null,
            "BIZ_NM":null,
            "TYPE_NM":null,
            "TELNO":"111-1111-1111",
            "MNY_NM":null,
            "POSBL_YN":null,
            "DATE":"2018-09-30",
            "ROAD_ADDR":"adrress",
            "ZIP_CD":"10303",
            "LOGT":"126.80090346",
            "LAT":"37.673069059",
         }
        ]
    }
]

}

То, что я хочу сделать, это декодировать некоторые свойства из секция строки.

Итак, я создал несколько структур, подобных этой.

struct List: Decodable {
    let Region: [Stores]
}


struct Stores: Decodable {
    let row: [StoreInfo]
}

struct StoreInfo: Decodable {
    let COM_NAME: String?
    let TYPE_NM: String?
    let TELNO: String?
    let DATE: String?
    let ROAD_ADDR: String?
    let LOGT: String?
    let LAT: String?
}

И расшифровал с помощью Jsondecoder, как это.

 let decodedData = try JSONDecoder().decode(List.self, from: data)
 print(decodedData)

Я получаю такую ​​ошибку.

    keyNotFound(CodingKeys(stringValue: "Region", intValue: nil),
 Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"Region\", intValue: nil) 
(\"Region\").", underlyingError: nil))

Как правильно декодировать?

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Массив "Регион" содержит различные типы, в swift он будет объявлен как [Любой], поэтому вам нужно объявить строку как необязательную, поэтому, когда декодер находит и пытается декодировать элемент "head", он просто игнорирует это элемент и декодировать следующий.

struct Stores: Decodable {
    let row: [StoreInfo]?
}

PS
Отправленная вами ошибка не генерируется из отправленного кода, настоящая ошибка для отправленного кода:

keyNotFound (CodingKeys (stringValue: «строка», intValue: nil), Swift.DecodingError.Context (codingPath: [CodingKeys (stringValue: «Region», intValue: nil), _JSONKey (stringValue: «Index 0», intValue: 0)) ], debugDescription: "Нет значения, связанного с ключом CodingKeys (stringValue: \" row \ ", intValue: nil) (\" row \ ").", underError: nil))

DS

0 голосов
/ 01 мая 2020

Я использовал хранилища и сохраняю информацию как необязательные и создал структуру с Codable, и это сработало.

struct List: Codable {
    let Region: [Stores]?
}


struct Stores: Codable {
    let row: [StoreInfo]?
}

struct StoreInfo: Codable {
    let COM_NAME: String?
    let TYPE_NM: String?
    let TELNO: String?
    let DATE: String?
    let ROAD_ADDR: String?
    let LOGT: String?
    let LAT: String?
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...