У меня есть строка st
возвращенный из веб-сервиса. Я преобразовываю строку в объект, как я могу рассчитать нет. из массивов в нем? (для этого случая это 2),
var st = "{[{"Name": "fake", "Address": "add"]},[{"Name": "fake", "Address": "add"}]}";
var json = eval(st);
json.length
всегда возвращается 1
Я удивлен, что json.length
что-то возвращает; эта строка JSON недействительна. Крайние фигурные скобки ( {}
) обозначают объект, который должен содержать ключи и значения, но он просто содержит значение (массив без ключа).
Если убрать фигурные скобки, все должно работать правильно.Вы положили их туда, возможно, потому, что видели, как это делается? В таком случае вам нужны круглые скобки ( ()
), а не фигурные скобки.
Обратите внимание, что использование eval
в строках JSON небезопасно, вы хотите использовать декодер JSON, который не использует eval
(например, json2.js , который использует eval
, но только после того, как очень тщательно проверит, что это безопасно, изменив его при необходимости), для оптимальной безопасности. Скобки помогают, но это отнюдь не полное решение.
изменить - теперь, когда я добрался до будущего, можно использовать такие API, как Object.keys ()
, Object.getOwnPropertyNames ()
и Object.getOwnPropertySymbols
, чтобы получить количество свойств в объекте:
var props = Object.getOwnPropertySymbols(someObject);
var length = props.length; // number of properties
По моему опыту, довольно редко меня заботит количество свойств в объекте; обычно, если вы не знаете, что такое объект, вас интересуют определенные свойства (по имени). Однако нет ничего плохого в использовании этих API.