Получение значения postal_code из результатов JSON - PullRequest
1 голос
/ 12 декабря 2011

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

Как я могу получить почтовый индекс из результатов 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]`

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

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

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

Ответы [ 3 ]

0 голосов
/ 12 декабря 2011

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

$.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);
}
0 голосов
/ 07 февраля 2012

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

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

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

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

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

0 голосов
/ 12 декабря 2011

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

...