Как получить элементы из JSON Java Script?

96
19 апреля 2021, 13:50

В Java Script не силён. Пытаюсь достать из JSON объекта data элемент.

Объект data был получен из строки msg, представляющей JSON, так: var data = JSON.parse(msg);

alert(data) выдаёт {"str0":{"Id":1,"DevId":999,"State":255,"IP":0,"Data":5000},"str1":{"Id":2,"DevId":999,"State":255,"IP":0,"Data":5000},"str2":{"Id":3,"DevId":999,"State":255,"IP":0,"Data":5000},"str3":{"Id":4,"DevId":999,"State":255,"IP":0,"Data":5000}} на мой взгляд нормальный JSON.

alert(data["str0"]), вопреки ожиданиям, выдаёт undefined

Вопрос прост: как получить элемент по ключу?

Дополнительная информация: JSON получен из ASP.NET Core с помощью JavaScriptSerializer из обычного словаря C#.

В визуализаторе JSON в Visual Studio вовремя отладки, возвращаемой методом Web API значение представляется корректно (показано на картинке).

Answer 1

Используйте метод JSON.parse():

let arr = JSON.parse(data);
alert(arr.str0);

Тут пример с вашим JSON

Answer 2

В этом случае было необходимо дважды выполнить операцию JSON.parse для окончательного преобразования. Вероятно, причина в добавленных ASP.NET Core символах \.

Answer 3

После использования данной строки var data = JSON.parse(msg); и вызова alert(data), вы получаете вот такую строку: {"str0":{"Id":1,"DevId":999,"State":255,"IP":0,"Data":5000},"str1":{"Id":2,"DevId":999,"State":255,"IP":0,"Data":5000},"str2":{"Id":3,"DevId":999,"State":255,"IP":0,"Data":5000},"str3":{"Id":4,"DevId":999,"State":255,"IP":0,"Data":5000}}

это значит, что msg уже был переведён в объект после его получения, и не надо вызывать повторно var data = JSON.parse(msg) иначе Вы его повторно превращаете в JSON. В результате alert(data["str0"]) получается undefined, т.к. поиск значения объекта происходит в строке!!! Это говорит о том, что до метода done() или success(не знаю чем вы получаете значения в ajax) из-за заголовков или по другой причине происходит авто парсинг. В первом ответе на Ваш вопрос вам вызвали повторно данный метод с Вашими данными, и алерт получает [object Object], это корректная обработка результата, Вам правильно подсказали! почитайте о том как работает с данными alert(). Для строк и чисел он вернёт данные, а для объектов он вернёт [object Object]. Замените alert на console.log(data["str0"]) или console.log(data.str0) и вы Увидите результат

READ ALSO
Проверить домен на cross-origin policy

Проверить домен на cross-origin policy

Можете читать по выделенному тексту

102
Как реализовать remote: true для react (rails)?

Как реализовать remote: true для react (rails)?

Создаю форму таким образом:

114
Подключение аудио к сайту

Подключение аудио к сайту

Мне бы хотелось, чтобы музыка начинала играть как только подгрузилась страница, но почему-то не работает и в консоль выскакивает ошибка

94