首页 > 解决方案 > 可在 JSON 中解码字典 - Swift

问题描述

我正在尝试在数据中使用Decodable,但出现以下错误:1) 类型“客户”不符合协议“可解码”和 2) 使用未声明的类型“地址”。任何帮助都会很棒。DictionariesJSON

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)

标签: jsondictionarydecodable

解决方案


addressgeo Dictionaries认为是嵌套对象。由于使用未声明的类型“地址”错误,您收到类型“客户”不符合协议“可解码”错误。因此,首先,您需要通过声明类型来消除第二个错误。但是,如果你不声明,你也会得到两个新的错误。将以下代码添加到项目的顶部以消除任何错误并产生正确的输出。AddressGeo

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


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

推荐阅读