如何从谷歌地理编码API Swift解码Json数据
我向google geocoding api发送一个地址字符串,以获得该地址的经度和纬度,然而,当我获得JSON数据时,我正在努力解码返回的JSON数据。我认为数据应该放在一个结构中,但是由于数据中有不同的数组,我不知道如何构造它 获取地理编码位置的代码:如何从谷歌地理编码API Swift解码Json数据,swift,xcode,google-maps,geocoding,google-geocoding-api,Swift,Xcode,Google Maps,Geocoding,Google Geocoding Api,我向google geocoding api发送一个地址字符串,以获得该地址的经度和纬度,然而,当我获得JSON数据时,我正在努力解码返回的JSON数据。我认为数据应该放在一个结构中,但是由于数据中有不同的数组,我不知道如何构造它 获取地理编码位置的代码: func longLatLookUp() { let url = URL(string: "https://maps.googleapis.com/maps/api/geocode/json?ad
func longLatLookUp() {
let url = URL(string: "https://maps.googleapis.com/maps/api/geocode/json?address=10+Princes+Street+Edinburgh+Scotland&key={ API key }")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { return }
print(String(data: data, encoding: .utf8)!)
}
task.resume()
}
控制台返回:
{
"results" : [
{
"address_components" : [
{
"long_name" : "10",
"short_name" : "10",
"types" : [ "street_number" ]
},
{
"long_name" : "Princes Street",
"short_name" : "Princes St",
"types" : [ "route" ]
},
{
"long_name" : "Edinburgh",
"short_name" : "Edinburgh",
"types" : [ "postal_town" ]
},
{
"long_name" : "Edinburgh",
"short_name" : "Edinburgh",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Scotland",
"short_name" : "Scotland",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United Kingdom",
"short_name" : "GB",
"types" : [ "country", "political" ]
},
{
"long_name" : "EH2 2AN",
"short_name" : "EH2 2AN",
"types" : [ "postal_code" ]
}
],
"formatted_address" : "10 Princes St, Edinburgh EH2 2AN, UK",
"geometry" : {
"location" : {
"lat" : 55.95357130000001,
"lng" : -3.1900314
},
"location_type" : "ROOFTOP",
"viewport" : {
"northeast" : {
"lat" : 55.95492028029151,
"lng" : -3.188682419708498
},
"southwest" : {
"lat" : 55.95222231970851,
"lng" : -3.191380380291502
}
}
},
"place_id" : "ChIJweMPNY7Hh0gRWMp_nlFlOO0",
"plus_code" : {
"compound_code" : "XR35+CX Edinburgh, UK",
"global_code" : "9C7RXR35+CX"
},
"types" : [ "street_address" ]
}
],
"status" : "OK"
}
编辑:
plus_代码可以是nil,所以我将其更改为可选
struct Response: Decodable {
let results: [Component]
let status: String
struct Component: Decodable {
let address_components: [Address]
let formatted_address: String
let geometry: Geometry
let place_id: String
let plus_code: PlusCode?
let types: [String]
}
struct Address: Decodable {
let long_name: String
let short_name: String
let types : [String]
}
struct Geometry: Decodable {
let location: Location
let location_type: String
let viewport: Viewport
}
struct Viewport: Decodable {
let northeast: Location
let southwest: Location
}
struct PlusCode: Decodable {
let compound_code: String
let global_code: String
}
struct Location: Decodable {
let lat: Float
let lng: Float
}
}
您可以对数据进行如下解码:
let json = try! JSONDecoder().decode(Response.self, from: data)
将您的JOSN粘贴到中,它将帮助您学习如何构建结构。谢谢!这是一个很大的帮助,帮助我更好地理解结构和解码JSON数据。感谢这个结构的结构真的帮助了我!然而,我需要为每一个添加一个CodingKeys枚举以使其工作。很高兴听到它的帮助!但它不需要CodingKeys,因为所有属性名都与JSON键匹配。