В 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) и вы Увидите результат
Продвижение своими сайтами как стратегия роста и независимости