我正在尝试使用JQ从Lat和Long值获取Country和City名称。
以下是JSON的完整示例 https://maps.googleapis.com/maps/api/geocode/json?latlng=55.397563,10.39870099999996&sensor=false
我在jqplay,
中粘贴了返回的JSON尝试选择国家和城市名称,但我得到的最接近的是
.results[0].address_components[].short_name
如何指定将节点置于"types" : [ "country", "political" ]
?
由于
答案 0 :(得分:1)
我不清楚你究竟在寻找什么。每个结果都有一组类型,每个地址组件也有一组类型。你想要哪一个?我们可以编写一个与您尝试的相匹配的过滤器,但考虑到数据,它对您来说完全没用。包含您列出的类型的唯一项目只是国家/地区名称。
无论如何,假设您想要获得具有"country"
和"political"
类型的结果对象,请使用contains()
过滤器。
.results | map(
select(
.types | contains(["country","political"])
)
)
否则,您需要从此数据集中明确您想要的内容。预期结果的一个例子......
答案 1 :(得分:0)
我写了一个函数来做到这一点。
/**
* geocodeResponse is an object full of address data.
* This function will "fish" for the right value
*
* example: type = 'postal_code' =>
* geocodeResponse.address_components[5].types[1] = 'postal_code'
* geocodeResponse.address_components[5].long_name = '1000'
*
* type = 'route' =>
* geocodeResponse.address_components[1].types[1] = 'route'
* geocodeResponse.address_components[1].long_name = 'Wetstraat'
*/
function addresComponent(type, geocodeResponse, shortName) {
for(var i=0; i < geocodeResponse.address_components.length; i++) {
for (var j=0; j < geocodeResponse.address_components[i].types.length; j++) {
if (geocodeResponse.address_components[i].types[j] == type) {
if (shortName) {
return geocodeResponse.address_components[i].short_name;
}
else {
return geocodeResponse.address_components[i].long_name;
}
}
}
}
return '';
}
使用它的方式;一个例子:
...
myGeocoder.geocode({'latLng': marker.getPosition()}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK && results[1]) {
var country = addresComponent('country', results[1], true);
var postal_code = addresComponent('postal_code', results[1], true);
...
}
});
...
我在这里使用它:saving marker data into db
答案 2 :(得分:0)
将json分配给结果变量,var results = {your json}。 然后试试这个:
for( var idx in results.results)
{
var address = results.results[idx].address_components;
for(var elmIdx in address)
{
if(address[elmIdx].types.indexOf("country") > -1 &&
address[elmIdx].types.indexOf("political") > -1)
{
address[elmIdx].short_name //this is the country name
address[elmIdx].long_name //this is the country name
}
}
}