这可能是一个与JSON相关的简单问题。我已成功从Google Places API接收到一个JSON对象,该对象与Google Places API文档中的示例完全相同。我需要在我的代码中将每个地址组成部分(街道编号,城市,州,邮政编码等)分配给一个单独的变量。例如,如何最好地引用street_number?
[这是我现在的操作方式,它将无法正常工作,因为例如,如果我的地址没有'floor',那么我将不得不引用address_components[0]
而不是address_components[1]
。这是我现在无法执行的方式:
const MyStreetNumber = details.address_components[1].long_name
console.log(MyStreetNumber) //logs 48
这是“详细信息”的定义(我从Google Places API收到的响应):
{
"html_attributions" : [],
"result" : {
"address_components" : [
{
"long_name" : "5",
"short_name" : "5",
"types" : [ "floor" ]
},
{
"long_name" : "48",
"short_name" : "48",
"types" : [ "street_number" ]
},
{
"long_name" : "Pirrama Road",
"short_name" : "Pirrama Rd",
"types" : [ "route" ]
},
{
"long_name" : "Pyrmont",
"short_name" : "Pyrmont",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Council of the City of Sydney",
"short_name" : "Sydney",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "New South Wales",
"short_name" : "NSW",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Australia",
"short_name" : "AU",
"types" : [ "country", "political" ]
},
{
"long_name" : "2009",
"short_name" : "2009",
"types" : [ "postal_code" ]
}
],
"adr_address" : "5, \u003cspan class=\"street-address\"\u003e48 Pirrama Rd\u003c/span\u003e, \u003cspan class=\"locality\"\u003ePyrmont\u003c/span\u003e \u003cspan class=\"region\"\u003eNSW\u003c/span\u003e \u003cspan class=\"postal-code\"\u003e2009\u003c/span\u003e, \u003cspan class=\"country-name\"\u003eAustralia\u003c/span\u003e",
"formatted_address" : "5, 48 Pirrama Rd, Pyrmont NSW 2009, Australia",
"formatted_phone_number" : "(02) 9374 4000",
"geometry" : {
"location" : {
"lat" : -33.866651,
"lng" : 151.195827
},
"viewport" : {
"northeast" : {
"lat" : -33.8653881697085,
"lng" : 151.1969739802915
},
"southwest" : {
"lat" : -33.86808613029149,
"lng" : 151.1942760197085
}
}
},
"icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
"id" : "4f89212bf76dde31f092cfc14d7506555d85b5c7",
"international_phone_number" : "+61 2 9374 4000",
"name" : "Google",
"place_id" : "ChIJN1t_tDeuEmsRUsoyG83frY4",
"rating" : 4.5,
"reference" : "CmRSAAAAjiEr2_A4yI-DyqGcfsceTv-IBJXHB5-W3ckmGk9QAYk4USgeV8ihBcGBEK5Z1w4ajRZNVAfSbROiKbbuniq0c9rIq_xqkrf_3HpZzX-pFJuJY3cBtG68LSAHzWXB8UzwEhAx04rgN0_WieYLfVp4K0duGhTU58LFaqwcaex73Kcyy0ghYOQTkg",
"reviews" : [
{
"author_name" : "Robert Ardill",
"author_url" : "https://www.google.com/maps/contrib/106422854611155436041/reviews",
"language" : "en",
"profile_photo_url" : "https://lh3.googleusercontent.com/-T47KxWuAoJU/AAAAAAAAAAI/AAAAAAAAAZo/BDmyI12BZAs/s128-c0x00000000-cc-rp-mo-ba1/photo.jpg",
"rating" : 5,
"relative_time_description" : "a month ago",
"text" : "Awesome offices. Great facilities, location and views. Staff are great hosts",
"time" : 1491144016
}
],
"types" : [ "point_of_interest", "establishment" ],
"url" : "https://maps.google.com/?cid=10281119596374313554",
"utc_offset" : 600,
"vicinity" : "5, 48 Pirrama Road, Pyrmont",
"website" : "https://www.google.com.au/about/careers/locations/sydney/"
},
"status" : "OK"
}
好,所以我最终只是遍历details.address_components来分配变量。我对城市进行了两次检查,因为有时我将其称为“地区”,有时又将其称为“ subLocality_level_1”,具体取决于我相信的国家/地区:
function handleGooglePlacesPress(data,details){
var StreetNumber = null;
var StreetName = null;
var City = null;
var State = null;
var Country = null;
var PostalCode = null;
const addressComponents = details.address_components;
addressComponents.forEach(addressComponent => {
const addressType = addressComponent.types[0]
if(addressType == 'street_number'){
StreetNumber = addressComponent.long_name;
}
if(addressType == 'route'){
StreetName = addressComponent.long_name;
}
if(addressType == 'sublocality_level_1'){
City = addressComponent.long_name;
}
if(addressType == 'locality'){
City = addressComponent.long_name;
}
if(addressType == 'administrative_area_level_1'){
State = addressComponent.long_name
}
if(addressType == 'postal_code'){
PostalCode = addressComponent.long_name
}
if(addressType == 'country'){
Country = addressComponent.long_name
}
});
console.log(StreetNumber,StreetName,City,State,PostalCode,Country) //logs each address piece
您可以使用for循环并检查types
值,这是一个简单的示例:
var add_comps = json['result']['address_components'];
for (var i = 0; i < add_comps.length; i++) {
if (add_comps[i]['types'] == 'street_number') {
console.log(i);
}
}