views:

272

answers:

2

i have the following JSON response, but i am not sure how to properly loop trough it and use.

{
  "ID": 1,
  "Name": "dept1",
  "Categories": [
    {
      "ID": 1,
      "Name": "catg1"
    },
    {
      "ID": 2,
      "Name": "catg2"
    }
  ]
}

following code alerts me the departmentID which is 1, then its name 'dept1', then this: '[object Object],[object Object]'

$.getJSON("mainPage2.aspx", function(result) {
   $.each(result, function(i, item) {
      alert(this);
   });
});

all i want to do is to create a div using department info, and create another div inside it which includes the information of categories that belong to that deparment.

+2  A: 

Well, its showing its getting the object alright, have you tried

    $.getJSON("mainPage2.aspx", function(result) {
   $.each(result, function(i, item) {
      alert(item.Name);
   });
});

Item being the object passed through from the each function it should pick this up and alert out 'dept1' or whatever the text is set

if you want to loop through the categories then do another loop i.e.

    $.getJSON("mainPage2.aspx", function(result) {
   $.each(result, function(i, item) {
      alert(item.Name);
        $.each(item.Categories, function(i, cat) {
           alert(cat.Name)
        }
   });
});
Israfel
your solution makes sense, but returns "undefined".
Batu
+1  A: 
for(var key in result) {
    var value = result[key];
    if(typeof value == 'object') {
        if(value instanceof Array) {
            // an array. loop through children
            for(var i = 0; i < value.length; i++) {
                var item = value[i];
            }
        } else {
            // complex object, not array. inner for loop on keys?
        }
    } else {
        // regular string/number etc. just print out value?
    }
}
David Hedlund
this just works perfectly, thank you so much, David.
Batu
he did mention jQuery not normal-plain-javascript :-)
balexandre
@Batu Israfel code works fine as well and it's more human readable!
balexandre
@balexandre no, code does not work for me as i mentioned in a comment on @israfel's solution. besides, imho @David's solution is much more configurable and handy.
Batu