Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2023, 03:32
Интересующийся
Отправить личное сообщение для frost56 Посмотреть профиль Найти все сообщения от frost56
 
Регистрация: 28.06.2012
Сообщений: 24

Разбор массива JSON ответа
Получил ответ от сервера, на php бы давно решил, а как вытащить в лог значение "AddressLine": "Россия, Москва, улица Петровка, 38с11", ?


Ответ JSON:
Код:
{
	"response":
	{
		"GeoObjectCollection":
		{
			"metaDataProperty":
			{
				"GeocoderResponseMetaData":
				{
					"Point":
					{
						"pos": "37.6154 55.7701"
					},
					"request": "55.7701,37.6154",
					"results": "10",
					"found": "8"
				}
			},
			"featureMember": [
			{
				"GeoObject":
				{
					"metaDataProperty":
					{
						"GeocoderMetaData":
						{
							"precision": "exact",
							"text": "Россия, Москва, улица Петровка, 38с11",
							"kind": "house",
							"Address":
							{
								"country_code": "RU",
								"formatted": "Россия, Москва, улица Петровка, 38с11",
								"postal_code": "127994",
								"Components": [
								{
									"kind": "country",
									"name": "Россия"
								},
								{
									"kind": "province",
									"name": "Центральный федеральный округ"
								},
								{
									"kind": "province",
									"name": "Москва"
								},
								{
									"kind": "locality",
									"name": "Москва"
								},
								{
									"kind": "street",
									"name": "улица Петровка"
								},
								{
									"kind": "house",
									"name": "38с11"
								}]
							},
							"AddressDetails":
							{
								"Country":
								{
									"AddressLine": "Россия, Москва, улица Петровка, 38с11",
									"CountryNameCode": "RU",
									"CountryName": "Россия",
									"AdministrativeArea":
									{
										"AdministrativeAreaName": "Москва",
										"Locality":
										{
											"LocalityName": "Москва",
											"Thoroughfare":
											{
												"ThoroughfareName": "улица Петровка",
												"Premise":
												{
													"PremiseNumber": "38с11",
													"PostalCode":
													{
														"PostalCodeNumber": "127994"
													}
												}
											}
										}
									}
								}
							}
						}
					},
					"name": "улица Петровка, 38с11",
					"description": "Москва, Россия",
					"boundedBy":
					{
						"Envelope":
						{
							"lowerCorner": "37.61123 55.767808",
							"upperCorner": "37.619441 55.772436"
						}
					},
					"Point":
					{
						"pos": "37.615336 55.770122"
					}
				}
			},
			{
				"GeoObject":
				{
					"metaDataProperty":
					{
						"GeocoderMetaData":
						{
							"precision": "street",
							"text": "Россия, Москва, улица Петровка",
							"kind": "street",
							"Address":
							{
								"country_code": "RU",
								"formatted": "Россия, Москва, улица Петровка",
								"Components": [
								{
									"kind": "country",
									"name": "Россия"
								},
								{
									"kind": "province",
									"name": "Центральный федеральный округ"
								},
								{
									"kind": "province",
									"name": "Москва"
								},
								{
									"kind": "locality",
									"name": "Москва"
								},
								{
									"kind": "street",
									"name": "улица Петровка"
								}]
							},
							"AddressDetails":
							{
								"Country":
								{
									"AddressLine": "Россия, Москва, улица Петровка",
									"CountryNameCode": "RU",
									"CountryName": "Россия",
									"AdministrativeArea":
									{
										"AdministrativeAreaName": "Москва",
										"Locality":
										{
											"LocalityName": "Москва",
											"Thoroughfare":
											{
												"ThoroughfareName": "улица Петровка"
											}
										}
									}
								}
							}
						}
					},
					"name": "улица Петровка",
					"description": "Москва, Россия",
					"boundedBy":
					{
						"Envelope":
						{
							"lowerCorner": "37.611634 55.758843",
							"upperCorner": "37.620016 55.770228"
						}
					},
					"Point":
					{
						"pos": "37.616458 55.765012"
					}
				}
			},
			{
				"GeoObject":
				{
					"metaDataProperty":
					{
						"GeocoderMetaData":
						{
							"precision": "other",
							"text": "Россия, Москва, Центральный административный округ, Тверской район",
							"kind": "district",
							"Address":
							{
								"country_code": "RU",
								"formatted": "Россия, Москва, Центральный административный округ, Тверской район",
								"Components": [
								{
									"kind": "country",
									"name": "Россия"
								},
								{
									"kind": "province",
									"name": "Центральный федеральный округ"
								},
								{
									"kind": "province",
									"name": "Москва"
								},
								{
									"kind": "locality",
									"name": "Москва"
								},
								{
									"kind": "district",
									"name": "Центральный административный округ"
								},
								{
									"kind": "district",
									"name": "Тверской район"
								}]
							},
							"AddressDetails":
							{
								"Country":
								{
									"AddressLine": "Россия, Москва, Центральный административный округ, Тверской район",
									"CountryNameCode": "RU",
									"CountryName": "Россия",
									"AdministrativeArea":
									{
										"AdministrativeAreaName": "Москва",
										"Locality":
										{
											"LocalityName": "Москва",
											"DependentLocality":
											{
												"DependentLocalityName": "Центральный административный округ",
												"DependentLocality":
												{
													"DependentLocalityName": "Тверской район"
												}
											}
										}
									}
								}
							}
						}
					},
					"name": "Тверской район",
					"description": "Центральный административный округ, Москва, Россия",
					"boundedBy":
					{
						"Envelope":
						{
							"lowerCorner": "37.575199 55.746821",
							"upperCorner": "37.634838 55.792448"
						}
					},
					"Point":
					{
						"pos": "37.613171 55.762566"
					}
				}
			},
			{
				"GeoObject":
				{
					"metaDataProperty":
					{
						"GeocoderMetaData":
						{
							"precision": "other",
							"text": "Россия, Москва, Центральный административный округ",
							"kind": "district",
							"Address":
							{
								"country_code": "RU",
								"formatted": "Россия, Москва, Центральный административный округ",
								"Components": [
								{
									"kind": "country",
									"name": "Россия"
								},
								{
									"kind": "province",
									"name": "Центральный федеральный округ"
								},
								{
									"kind": "province",
									"name": "Москва"
								},
								{
									"kind": "locality",
									"name": "Москва"
								},
								{
									"kind": "district",
									"name": "Центральный административный округ"
								}]
							},
							"AddressDetails":
							{
								"Country":
								{
									"AddressLine": "Россия, Москва, Центральный административный округ",
									"CountryNameCode": "RU",
									"CountryName": "Россия",
									"AdministrativeArea":
									{
										"AdministrativeAreaName": "Москва",
										"Locality":
										{
											"LocalityName": "Москва",
											"DependentLocality":
											{
		
						"pos": "37.617698 55.755864"
					}
				}
			},
			{
				"GeoObject":
				{
					"metaDataProperty":
					{
						"GeocoderMetaData":
						{
							"precision": "other",
							"text": "Россия, Центральный федеральный округ",
							"kind": "province",
							"Address":
							{
								"country_code": "RU",
								"formatted": "Россия, Центральный федеральный округ",
								"Components": [
								{
									"kind": "country",
									"name": "Россия"
								},
								{
									"kind": "province",
									"name": "Центральный федеральный округ"
								}]
							},
							"AddressDetails":
							{
								"Country":
								{
									"AddressLine": "Россия, Центральный федеральный округ",
									"CountryNameCode": "RU",
									"CountryName": "Россия"
								}
							}
						}
					},
					"name": "Центральный федеральный округ",
					"description": "Россия",
					"boundedBy":
					{
						"Envelope":
						{
							"lowerCorner": "30.748407 49.556986",
							"upperCorner": "47.6426 59.623738"
						}
					},
					"Point":
					{
						"pos": "38.064727 54.87375"
					}
				}
			},
			{
				"GeoObject":
				{
					"metaDataProperty":
					{
						"GeocoderMetaData":
						{
							"precision": "other",
							"text": "Россия",
							"kind": "country",
							"Address":
							{
								"country_code": "RU",
								"formatted": "Россия",
								"Components": [
								{
									"kind": "country",
									"name": "Россия"
								}]
							},
							"AddressDetails":
							{
								"Country":
								{
									"AddressLine": "Россия",
									"CountryNameCode": "RU",
									"CountryName": "Россия"
								}
							}
						}
					},
					"name": "Россия",
					"boundedBy":
					{
						"Envelope":
						{
							"lowerCorner": "19.484764 41.185996",
							"upperCorner": "191.128012 81.886117"
						}
					},
					"Point":
					{
						"pos": "99.505405 61.698657"
					}
				}
			}]
		}
	}
}
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2023, 07:23
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,709

obj.response.GeoObjectCollection.featureMember[0].GeoObject.metaDataProperty.GeocoderMetaData.Addre ssDetails.Country.AddressLine
Ответить с цитированием
  #3 (permalink)  
Старый 19.01.2023, 07:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

frost56,
Сообщение от frost56
как вытащить в лог значение "AddressLine": "Россия, Москва, улица Петровка, 38с11", ?
никак, предоставленный объект имеет нарушения структуры.
иначе можно было-бы так
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>
Ответить с цитированием
  #4 (permalink)  
Старый 19.01.2023, 17:21
Аспирант
Отправить личное сообщение для Frost56ru Посмотреть профиль Найти все сообщения от Frost56ru
 
Регистрация: 19.03.2016
Сообщений: 42

Сообщение от рони Посмотреть сообщение
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
Ответить с цитированием
  #5 (permalink)  
Старый 19.01.2023, 17:49
Аспирант
Отправить личное сообщение для Frost56ru Посмотреть профиль Найти все сообщения от Frost56ru
 
Регистрация: 19.03.2016
Сообщений: 42

Сообщение от voraa Посмотреть сообщение
obj.response.GeoObjectCollection.featureMember[0].GeoObject.metaDataProperty.GeocoderMetaData.Addre ssDetails.Country.AddressLine

Вывод: 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')
    at xhr.onload (event_properties.js:38:58)
Ответить с цитированием
  #6 (permalink)  
Старый 19.01.2023, 18:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от Frost56ru
Вот полный ответ
по ссылке всё в порядке -- путь
response.GeoObjectCollection.featureMember[0].GeoObject.metaDataProperty.GeocoderMetaData.AddressDetails.Country.AddressLine
должен работать
Ответить с цитированием
  #7 (permalink)  
Старый 19.01.2023, 18:47
Аспирант
Отправить личное сообщение для Frost56ru Посмотреть профиль Найти все сообщения от Frost56ru
 
Регистрация: 19.03.2016
Сообщений: 42

Сообщение от рони Посмотреть сообщение
по ссылке всё в порядке -- путь
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')
    at xhr.onload (event_properties.js:38:58)
Ответить с цитированием
  #8 (permalink)  
Старый 19.01.2023, 19:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Frost56ru,
а так
const response = JSON.parse(xhr.response);
Ответить с цитированием
  #9 (permalink)  
Старый 19.01.2023, 19:10
Аспирант
Отправить личное сообщение для Frost56ru Посмотреть профиль Найти все сообщения от Frost56ru
 
Регистрация: 19.03.2016
Сообщений: 42

Сообщение от рони Посмотреть сообщение
Frost56ru,
а так
const response = JSON.parse(xhr.response);
VM12892:1 Uncaught SyntaxError: "[object Object]" is not valid JSON
at JSON.parse (<anonymous>)
at xhr.onload (event_properties.js:37:39)
Ответить с цитированием
  #10 (permalink)  
Старый 19.01.2023, 20:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Frost56ru,
что у вас в response, посмотреть можно только вам.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сравнить id массива с id json и закрасить элемент если id совпадают? Olga27 Общие вопросы Javascript 2 30.08.2022 11:24
Разбор json ответа 1lider AJAX и COMET 11 23.06.2014 07:36
Как достать данные из JSON массива? Dimaz jQuery 15 27.11.2012 21:58
Разбор ответа в формате Json yv73 Общие вопросы Javascript 3 09.08.2012 05:06
Разбор ответа в формате Json Rush Общие вопросы Javascript 11 29.01.2010 16:57