Разбор массива JSON ответа
Получил ответ от сервера, на php бы давно решил, а как вытащить в лог значение "AddressLine": "Россия, Москва, улица Петровка, 38с11", ?
Ответ JSON: Код:
{ |
obj.response.GeoObjectCollection.featureMember[0].GeoObject.metaDataProperty.GeocoderMetaData.Addre ssDetails.Country.AddressLine
|
frost56,
Цитата:
иначе можно было-бы так console.log(obj.response.GeoObjectCollection.featureMember[0].GeoObject.metaDataProperty.GeocoderMetaData.AddressDetails.Country.AddressLine) или так
<script src="https://nervgh.github.io/js/recursive-iterator.min.js"></script>
<script>
let obj = {
}
for (let {
node,
path
} of new RecursiveIterator(obj)) {
if (path.includes('AddressLine')) {
console.log(node);
break
}
}
</script>
|
Цитата:
Вот полный ответ Код:
https://wtools.io/paste-code/bIYj |
Цитата:
Вывод: console.log(response.GeoObjectCollection.featureMe mber[0].GeoObject.metaDataProperty.GeocoderMetaData.Addre ssDetails.Country.AddressLine); Ответ: Код:
event_properties.js:38 Uncaught TypeError: Cannot read properties of undefined (reading 'featureMember') |
Цитата:
response.GeoObjectCollection.featureMember[0].GeoObject.metaDataProperty.GeocoderMetaData.AddressDetails.Country.AddressLineдолжен работать |
Цитата:
Код:
ymaps.ready(init);
var myMap;
function init () {
myMap = new ymaps.Map("map", {
center: [55.7519, 37.6116], // MSK
zoom: 11
}, {
balloonMaxWidth: 500,
searchControlProvider: 'yandex#search'
});
// Обработка события, возникающего при щелчке
// левой кнопкой мыши в любой точке карты.
// При возникновении такого события откроем балун.
myMap.events.add('click', function (e) {
if (!myMap.balloon.isOpen()) {
var coords = e.get('coords');
myMap.balloon.open(coords, {
contentHeader:'Поиск адреса для доставки...',
contentBody:
'<p>Это ваш дом?' + [
coords[0].toPrecision(6),
coords[1].toPrecision(6)
].join(', ') + '</p>',
contentFooter:'<sup>Щелкните еще раз чтобы закрыть</sup>'
});
var sjoin = [coords[0].toPrecision(6),coords[1].toPrecision(6)].join(',');
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://geocode-maps.yandex.ru/1.x/?apikey=80544-a071-416d-908a-66ad26bf029d&geocode='+sjoin+'&sco=latlong&format=json');
xhr.responseType="json";
xhr.onload = () => {
if(xhr.status !== 200){
console.log(`Ошибка ${xhr.status}: ${xhr.statusText}`);
return;
}
const response = xhr.response;
console.log(response.GeoObjectCollection.featureMember[0].GeoObject.metaDataProperty.GeocoderMetaData.AddressDetails.Country.AddressLine);
};
xhr.onerror = () => {
console.log(`Ошибка выполнения запроса`);
};
xhr.send();
}
else {
myMap.balloon.close();
}
});
// Обработка события, возникающего при щелчке
// правой кнопки мыши в любой точке карты.
// При возникновении такого события покажем всплывающую подсказку
// в точке щелчка.
myMap.events.add('contextmenu', function (e) {
myMap.hint.open(e.get('coords'), 'Отметьте свой дом на карте');
});
// Скрываем хинт при открытии балуна.
myMap.events.add('balloonopen', function (e) {
myMap.hint.close();
});
}
Ответ в логе: Код:
event_properties.js:38 Uncaught TypeError: Cannot read properties of undefined (reading 'featureMember') |
Frost56ru,
а так const response = JSON.parse(xhr.response); |
Цитата:
at JSON.parse (<anonymous>) at xhr.onload (event_properties.js:37:39) |
Frost56ru,
что у вас в response, посмотреть можно только вам. |
| Часовой пояс GMT +3, время: 17:56. |