Я пытаюсь получить названия страны и города из значений Lat и Long с помощью JQ.
Вот полный пример JSON https://maps.googleapis.com/maps/ api / geocode / json? latlng = 55.397563,10.39870099999996 & sensor = false
Я вставил возвращенный JSON в jqplay,
Пытался выбрать названия страны и города, но самое близкое, что я нашел, это
.results[0].address_components[].short_name
Как я могу указать просто привести узлы, где "types" : [ "country", "political" ]
?
Благодарность
3 ответа
Мне непонятно, что именно вы ищете. Каждый результат имеет набор типов, каждый компонент адреса также имеет набор типов. Какой из них ты хотел? Мы можем написать фильтр, который будет соответствовать тому, что вы пытались сделать, но с учетом данных он будет для вас совершенно бесполезен. Единственный элемент, который содержит перечисленные вами типы, - это просто название страны.
В любом случае, если вы хотите получить объект результата с типами "country"
и "political"
, используйте фильтр contains()
.
.results | map(
select(
.types | contains(["country","political"])
)
)
В противном случае вам нужно будет уточнить, что именно вы хотели от этого набора данных. Пример ожидаемого результата ...
Я написал для этого функцию.
/**
* 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);
...
}
});
...
Я использовал его здесь: сохранение данных маркера в db
Назначьте 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
}
}
}
Похожие вопросы
Связанные вопросы
Новые вопросы
json
JSON (нотация объектов JavaScript) — это сериализуемый формат обмена данными, который может быть прочитан машиной и человеком. Не используйте этот тег для собственных объектов JavaScript или литералов объектов JavaScript. Прежде чем задать вопрос, подтвердите свой JSON с помощью валидатора JSON, такого как JSONLint (https://jsonlint.com).