jSon возражает количеству

У меня есть строка st возвращенный из веб-сервиса. Я преобразовываю строку в объект, как я могу рассчитать нет. из массивов в нем? (для этого случая это 2),

var st = "{[{"Name": "fake", "Address": "add"]},[{"Name": "fake", "Address": "add"}]}";  
var json = eval(st);  

json.length всегда возвращается 1

5
задан whoan 13 August 2015 в 23:35
поделиться

2 ответа

Я удивлен, что json.length что-то возвращает; эта строка JSON недействительна. Крайние фигурные скобки ( {} ) обозначают объект, который должен содержать ключи и значения, но он просто содержит значение (массив без ключа).

Если убрать фигурные скобки, все должно работать правильно.Вы положили их туда, возможно, потому, что видели, как это делается? В таком случае вам нужны круглые скобки ( () ), а не фигурные скобки.

Обратите внимание, что использование eval в строках JSON небезопасно, вы хотите использовать декодер JSON, который не использует eval (например, json2.js , который использует eval , но только после того, как очень тщательно проверит, что это безопасно, изменив его при необходимости), для оптимальной безопасности. Скобки помогают, но это отнюдь не полное решение.

5
ответ дан 18 December 2019 в 06:34
поделиться
  1. Это недопустимое выражение JSON.
  2. Не существует встроенного способа подсчета «членов» объекта. Вы можете написать один, но это проблематично из-за мягкости языка.

изменить - теперь, когда я добрался до будущего, можно использовать такие API, как Object.keys () , Object.getOwnPropertyNames () и Object.getOwnPropertySymbols , чтобы получить количество свойств в объекте:

var props = Object.getOwnPropertySymbols(someObject);
var length = props.length; // number of properties

По моему опыту, довольно редко меня заботит количество свойств в объекте; обычно, если вы не знаете, что такое объект, вас интересуют определенные свойства (по имени). Однако нет ничего плохого в использовании этих API.

-1
ответ дан 18 December 2019 в 06:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: