views:

65

answers:

2

HI,

I'm having a JSON parsed return object set.

{
  "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"]
      }
  }

I want to know about the length of each object and array.

I've used .length to get the length of annotation[0].length. I'm getting the expected result i.e.: 5. The same is to "user" & "id".

But I'm not getting the lengths of "word", "id58", "id61", etc... Also I want to know about the length of the comment & commentUser.

Please help me in this.

+1  A: 

The value for the key word in your example (let's call it obj) is an array, so obj.word.length should be 2.

The value for comment and commentUser is an object, which does not have length per se, so you'll need to count them yourself:

var length=0;
for(var dummy in obj.comment) length++;
AKX
Vinothkumar Arputharaj
@Vinothkumar Arputharaj - assuming `myObj` has the definition given in your sample code, then `myObj.word` is an array of length 2. If you find that `myObj.word.length` is `undefined` then some part of your description of the situation is wrong. Why not set a breakpoint in your browser and examine the data? You can do this in Firefox with Firebug, or with the built-in debuggers of IE 8 and Chrome.
Daniel Earwicker
However, I'm able to get the length of ** myObj.word.length ** by counting using for loop.
Vinothkumar Arputharaj
+1  A: 

To count the number of properties an object has, you need to loop through the properties but remember to use the hasOwnProperty function:

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

If you forget to do that, you will be looping through inherited properties. If you (or some library) has assigned a function to the prototype of Object, then all objects will seem to have that property, and thus will seem one item "longer" than they intrinsically are.

To avoid the need to remember this, consider using jQuery's each instead:

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