2013-06-27 3 views
0

잠시 json을 많이 사용하지 않았습니다.jsonery를 사용하여 json 객체를 반복합니다.

I가 다음 JSON 개체

[{"Id":1,"Category":"Category1","Comments":[ 
    {"Id":1,"Comment":"test"}, 
    {"Id":2,"Comment":"test 2"} 
]}, 
{"Id":2,"Category":"Category2","Comments":[ 
    {"Id":1,"Comment":"test"} 
]}, 
{"Id":3,"Category":"Category3","Comments":[ 
    {"Id":1,"Comment":"something"}, 
    {"Id":2,"Comment":"test 2"}, 
    {"Id":3,"Comment":"test 3"}, 
    {"Id":4,"Comment":"something 4"}, 
    {"Id":5,"Comment":"something 5"} 
]}] 

각 카테고리와 그 모든 의견을 인쇄 할 jQuery를/JS이 루프를 순환시키는 가장 좋은 방법은 무엇입니까?

답변

2

$.each(json, function(index, jsonObject)을 사용하십시오.

당신은 물론 일부 중첩, 어떤 깊이의 비 재귀 객체/JSON 객체와 함께 작동합니다 DEMO

$.each(json, function(index, jsonObject){ 
    console.log(jsonObject.Category); 
    $.each(jsonObject.Comments, function(i, comment){ 
     console.log(comment); 
    }); 
}); 
2

순수 js 솔루션의 라인을 따라 뭔가해야 할 것 :

var jsonObj = [{"Id":1,"Category":"Category1","Comments":[{"Id":1,"Comment":"test"},{"Id":2,"Comment":"test 2"}]},{"Id":2,"Category":"Category2","Comments":[{"Id":1,"Comment":"test"}]},{"Id":3,"Category":"Category3","Comments":[{"Id":1,"Comment":"something"},   {"Id":2,"Comment":"test 2"},   {"Id":3,"Comment":"test 3"},   {"Id":4,"Comment":"something 4"},   {"Id":5,"Comment":"something 5"}  ]}]; 

var obj2String = function (obj, indent) { // recursive method to print out all key-value pairs within an object 
    indent = indent ? indent+' ':' ';  // every level should be indented 2 spaces more 
    if (typeof obj !== 'object') {   // if it's a simple value (not obj or array) 
     return [indent, obj, '\n'].join('');// add it to the string (with a new line at the end) 
    } else { // otherwise 
     var ret = ''; 
     for (var key in obj) {    // loop through the object 
      if (obj.hasOwnProperty(key)) { // check if the key refers to one of its values (and not the prototype) 
       // if yes add the "key: " + the result objs2String(value) with correct indentation 
       ret += [indent, key+':\n', obj2String(obj[key], indent)].join(''); 
      } 
     } 
     return (obj.indexOf ?    // return the results wrapped in a [] or {} depending on if it's an object or array (by checking the indexOf method. of course this delivers false results if the object has an indexOf method) 
      [indent, '[\n', ret, indent, ']']:[indent, '{\n', ret, indent, '}']).join(''); 
    } 
} 

console.log(obj2String(jsonObj));   // print out the result 
1

이 기능을 사용하면 개체의 모든 구성원을 인쇄 할 수 있습니다.이 기능을 사용하면 원하는 대상 만 인쇄 할 수 있습니다. 편집 : 업데이트 바이올린 updated fiddle

var v= [{"Id":1,"Category":"Category1","Comments":[ 
     {"Id":1,"Comment":"test"}, 
     {"Id":2,"Comment":"test 2"} 
    ]}, 
    {"Id":2,"Category":"Category2","Comments":[ 
     {"Id":1,"Comment":"test"} 
    ]}, 
    {"Id":3,"Category":"Category3","Comments":[ 
     {"Id":1,"Comment":"something"}, 
     {"Id":2,"Comment":"test 2"}, 
     {"Id":3,"Comment":"test 3"}, 
     {"Id":4,"Comment":"something 4"}, 
     {"Id":5,"Comment":"something 5"} 
    ]}]; 
var rf=function recf(index,value){ 
console.log(value); 
    if (value instanceof Object){ 
     $.each(value,function(val,idx){recf(val,idx)}); 
    } 
}; 


$.each(v,rf); 

Here's my fiddle

1

당신은 순수한 자바 스크립트를 사용하는 경우 :

data는 JSON 데이터입니다

for (var i in data) 
{ 
    console.log("category:"+data[i].Category); 
    for(var j in data[i].Comments) 
    { 
     console.log(data[i].Comments[j].Comment); 
    } 
} 
관련 문제