JSON - найти длину объектов - PullRequest
0 голосов
/ 02 августа 2010

HI,

У меня установлен набор возвращаемого объекта JSON.

{
  "word":[
      "offered",
      "postings"
  ],

  "annotation":[
      ["offered highlighted","this is also given as annotation","This annotation has been added here currently","offering new annotation points","\"offered\" is in the sense of languages"],
      ["my postings","this is new annotation for postings.","my postings","this is posting annotation.... Working for the feature of the annotation."]
  ],

  "user":[
  ["","","vinoth","Anonymous","Vinoth"],
  ["Anonymous","vinoth","Anonymous","Arputharaj"]
  ],

  "id":[
  ["58","60","61","63","68"],
  ["32","57","59","62"]
  ],

  "comment":
  {
    "id58":["first comment","This is a old comment for this annotation","Next level of commenting.","Fourth comment to this annotation","testing"],
    "id61":["this is an old annotation.\r\nMy comment is very bad about this.","Second comment to this annotation"],
    "id57":["I want to add one more comment to this"]
    },

    "commentUser":{
      "id58":["vinoth","Anonymous","Vinothkumar","Vinothkumar","vinoth"],
      "id61":["Anonymous","Commentor"],
      "id57":["vinoth"]
      }
  }

Я хочу знать длину каждого объекта и массива.

Я использовал .length, чтобы получить длину annotation[0].length.Я получаю ожидаемый результат, то есть: 5. То же самое относится к «user» & «id».

Но я не получаю длины «word», «id58», «id61»,и т.д. ... Также я хочу узнать о длине comment & commentUser.

Пожалуйста, помогите мне в этом.

Ответы [ 2 ]

7 голосов
/ 02 августа 2010

Чтобы подсчитать количество свойств, которыми обладает объект, вам нужно пройтись по свойствам, но не забывайте использовать функцию hasOwnProperty:

var count = 0;
for (var p in obj) {
    if (obj.hasOwnProperty(p)) {
        count++;
    }
}

Если вы забудете это сделать, вы будете перебирать наследуемые свойства. Если вы (или какая-либо библиотека) назначили функцию прототипу Object, то все объекты будут обладать этим свойством и, таким образом, будут казаться на один элемент «длиннее», чем они есть на самом деле.

Чтобы избежать необходимости помнить об этом, рассмотрите использование вместо jQuery's each:

var count = 0;
$.each(obj, function(k, v) { count++; });

ОБНОВЛЕНИЕ В текущих браузерах:

Object.keys(someObj).length
5 голосов
/ 02 августа 2010

Значение ключа word в вашем примере (назовем его obj) является массивом, поэтому obj.word.length должно быть 2.

Значение для comment и commentUser - это объект, который сам по себе не имеет длины, поэтому вам нужно посчитать их самостоятельно:

var length=0;
for(var dummy in obj.comment) length++;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...