为了账号安全,请及时绑定邮箱和手机立即绑定

从这个 google 地方 API 地址结果中提取地址片段的最佳方法是什么?

从这个 google 地方 API 地址结果中提取地址片段的最佳方法是什么?

慕少森 2022-01-07 19:04:12
这可能是一个简单的 JSON 相关问题。我成功地从 Google Places API 接收到一个 JSON 对象,它看起来与 Google Places API 文档中的这个示例完全一样。我需要将每个地址组件(街道号码、城市、州、邮编等)分配给我的代码中的单独变量。例如,我如何最好地参考 street_number ?这是我现在的做法,但它不起作用,因为例如,如果我的地址没有“楼层”,那么我将不得不引用address_components[0]而不是address_components[1]. 这是我现在无法使用的方式:const MyStreetNumber =  details.address_components[1].long_nameconsole.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" ]         }      ],   
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

有点晚了,但如果它对任何人都有帮助,可以这样做:


如果您只需要第一个结果


function handleGooglePlacesPress = results => {

  const map = {

    street_number: 'streetNumber',

    route: 'streetName',

    sublocality_level_1: 'city',

    locality: 'city1',

    administrative_area_level_1: 'state',

    postal_code: 'postalCode',

    country: 'country'

  };

  const brokenDownAddress = {};

  results[0].address_components.forEach(component => {

    brokenDownAddress[map[component.types[0]]] = component.long_name;

  }

  return brokenDownAddress;

}


查看完整回答
反对 回复 2022-01-07
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您可以使用 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);

  }

}


查看完整回答
反对 回复 2022-01-07
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

好的,所以我最终只是循环通过 details.address_components 来分配变量。我检查了两次城市,因为有时它被称为“locality”,有时它被称为“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



查看完整回答
反对 回复 2022-01-07
  • 3 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信