Разбор массива 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, время: 23:40. |