从此Google Places API地址结果中提取地址的最佳方法是什么?

问题描述 投票:1回答:2

这可能是一个与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"
}
javascript json google-places-api
2个回答
0
投票

好,所以我最终只是遍历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

0
投票

您可以使用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);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.