Получение значения postal_code из результатов JSON

Я работаю с Google Maps Geocoder. У меня все работает нормально, но я не могу понять, как "пересекать" (анализировать?) Результаты JSON.

Как получить почтовый код из результатов Geocoder JSON?

Моя попытка состояла в том, чтобы перебрать "address_components", протестировав каждый ключ "values" для массива, содержащего "postal_code".

Итак, вот фрагмент того, что я написал до сих пор:

var geocoder = new google.maps.Geocoder();
geocoder.geocode({ address : cAddress }, function(results, status) {
 if(status == google.maps.GeocoderStatus.OK) {
 if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
 var fAddress = results[0].formatted_address;
 var contactLatLng = results[0].geometry.location;

 var postalCode = $.each(results[0].address_components, 
 function(componentIndex, componentValue) {
 var typesArray = componentValue.types;
 if ($.inArray("postal_code", typesArray)) {
 return componentValue.long_name;
 }
 })
 }
 }
});

Проблема в частности - postalCode

[object Object],[object Object],[object Object],[object Object], 
[object Object],[object Object],[object Object]'

Очевидно, что я чего-то не хватает.

Для справки, вот ссылка на результаты Google Geocoder для Google Maps: http://code.google.com/apis/maps/documentation/geocoding/#JSON

Спасибо за любую помощь! ~ Amos

3 ответа

Также обратите внимание: "return" не работает. Это асинхронная функция. Таким образом, к моменту запуска вашей функции родительская функция завершена.

$.each(results[0].address_components, function(componentIndex, componentValue) {
 if ($.inArray("postal_code", componentValue.types)) {
 doSomeThingWithPostcode(componentValue.long_name);
 }
});

Поэтому ваша функция должна делать что-то явно с результатом. например...

function doSomeThingWithPostcode(postcode) {
 $('#input').attr('value',postcode);
}


Во-первых, позвольте мне сказать спасибо за это. Просто помогла мне сама. Однако мне пришлось немного изменить код.

Проблема была в том, что jQuery.inArray() не возвращает логическое значение - он возвращает индекс элемента в массиве или -1. Я был в замешательстве с этим, и я не мог заставить ваш код работать, не изменяя выражение if, чтобы читать как таковое:

if( $.inArray( "postal_code", typesArray ) != -1 ) {
 pc = componentValue.long_name;
}

Когда я установил для проверки true или false, код внутри этого блока if будет выполняться на каждой отдельной итерации цикла $.each(), потому что оператор if всегда возвращает -1 вместо 0 или false. После проверки того, возвращался ли метод $.inArray() -1 или нет, код работал плавно.

Еще раз спасибо!


Предполагая, что $ здесь является объектом jQuery, вы возвращаете results[0].address_components collection, так как ваш return componentValue.long_name; results[0].address_components return componentValue.long_name; игнорируется each(). Вы ищете $.map(), который будет возвращать измененную коллекцию.

licensed under cc by-sa 3.0 with attribution.