В 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 значение представляется корректно (показано на картинке).
Используйте метод JSON.parse()
:
let arr = JSON.parse(data);
alert(arr.str0);
Тут пример с вашим JSON
В этом случае было необходимо дважды выполнить операцию JSON.parse
для окончательного преобразования. Вероятно, причина в добавленных ASP.NET Core символах \
.
После использования данной строки 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)
и вы Увидите результат
Виртуальный выделенный сервер (VDS) становится отличным выбором
Мне бы хотелось, чтобы музыка начинала играть как только подгрузилась страница, но почему-то не работает и в консоль выскакивает ошибка