Декодируемый для словарей в JSON — Swift

#json #dictionary #decodable

#json #словарь #декодируемый

Вопрос:

Я пытаюсь использовать Decodable for Dictionaries в JSON данных, но я получаю эти ошибки: 1) Тип ‘Customer’ не соответствует протоколу ‘Decodable’ и 2) Использование необъявленного типа ‘Address’. Любая помощь была бы отличной.

 struct Customer : Decodable {
    var firstName : String
    var lastName : String
    var address : Address
}

struct CustomersResponse : Decodable {
    var customers : [Customer]
}

let json = """

{
    "customers":[
        {
            "firstName" : "Henry",
            "lastName" : "Collins",
            "address" : {
                "street" : "1200 Highland Ave",
                "city" : "Houston",
                "state" : "TX",
                "geo" : {
                    "latitude" : 29.76,
                    "longitude" : -95.36
                }
            }
        }

    ]

}

""".data(using: .utf8)!

let customersResponse = try! 
JSONDecoder().decode(CustomersResponse.self, from: json)
print(customersResponse)
  

Ответ №1:

address И geo Dictionaries считаются вложенными объектами. Вы получаете ошибку «Декодируемый»типа ‘Customer’ не соответствует протоколу из-за использования необъявленного типа ‘Address’ ошибки. Итак, сначала вам нужно устранить эту вторую ошибку, объявив Address тип. Но тогда вы также получите две новые ошибки, если вы не объявите Geo . Добавьте следующий код в начало вашего проекта, чтобы устранить любые ошибки и создать правильный вывод.

 struct Geo : Decodable {
    var latitude : Double
    var longitude : Double
}


struct Address : Decodable {
    var street : String
    var city : String
    var state : String
    var geo : Geo
}