2015-07-20 167 views
4

我正面临着通过json对象在纯javascript代码中迭代的麻烦。 for循环或每个循环会很好,但我无法循环它。迭代json对象

//I want output in format like 
{ 
applicationGroupId: 
[ 
    treatmentIds 
] 
} 

like;

{ 
    "879545457291368": [ 
     879545457291370 
    ], 
    "879545447124032": [ 
     879545447124036, 
     879545447124034 
    ] 
} 


<script> 

var text = '{"treatmentApplicationGroupDataList": [{"applicationGroupId": 879545457291368,"treatments":[{"treatmentId": 879545457291370}]},{"applicationGroupId": 879545447124032,'+ 
      '"treatments": [{"treatmentId": 879545447124036 },{"treatmentId": 879545447124034}]}]}'; 

    var myObject = JSON.parse(text); 

    for(var i in myObject){ 

    document.write(myObject.treatmentApplicationGroupDataList[0].applicationGroupId); 
    document.write(myObject.treatmentApplicationGroupDataList[0].treatments[0].treatmentId); 

    document.write(myObject.treatmentApplicationGroupDataList[1].applicationGroupId); 
    document.write(myObject.treatmentApplicationGroupDataList[1].treatments[0].treatmentId); 
    ocument.write(myObject.treatmentApplicationGroupDataList[1].treatments[1].treatmentId); 

    } 

</script> 

因此,您可以看到我手动打印结果,但不在for循环中。

+0

可能重复http://stackoverflow.com/ question/1078118/how-do-i-iterate-over-a-json-structure) – Epsil0neR

+0

并非如此,因为我在发布问题之前已经通过此链接。我不得不迭代键/值对。请帮忙。 –

回答

3

由于您已尝试在您的示例中执行此操作,您可以使用for-in方法:

var text = '{"treatmentApplicationGroupDataList": [{"applicationGroupId": 879545457291368,"treatments":[{"treatmentId": 879545457291370}]},{"applicationGroupId": 879545447124032,"treatments": [{"treatmentId": 879545447124036 },{"treatmentId": 879545447124034}]}]}'; 

var myObject = JSON.parse(text); 

// Using the for-in method 
for (treatmentListId in myObject.treatmentApplicationGroupDataList) { 
    var curTreatmentList = myObject.treatmentApplicationGroupDataList[treatmentListId]; 

    console.log(curTreatmentList.applicationGroupId+": "); 

    for (treatmentId in curTreatmentList.treatments) { 
     console.log("=>"+curTreatmentList.treatments[treatmentId].treatmentId); 
    } 
}  

或者你可以使用.forEach method:可在这里

myObject.treatmentApplicationGroupDataList.forEach(function(treatmentList){ 
    console.log(treatmentList.applicationGroupId+": "); 
    treatmentList.treatments.forEach(function(treatment){ 
     console.log("=> "+treatment.treatmentId); 
    }); 
}); 

更多信息:For-each over an array in JavaScript?

的[?我如何遍历一个JSON结构(
1

请参阅下面的代码

var text = '{"treatmentApplicationGroupDataList": [{"applicationGroupId": 879545457291368,"treatments":[{"treatmentId": 879545457291370}]},{"applicationGroupId": 879545447124032,'+ 
      '"treatments": [{"treatmentId": 879545447124036 },{"treatmentId": 879545447124034}]}]}'; 

var myObject = JSON.parse(text); 
var newObj = {}; 

for(var i in myObject['treatmentApplicationGroupDataList']){ 
    var appGroupId = myObject['treatmentApplicationGroupDataList'][i]['applicationGroupId']; 
    newObj[appGroupId] = []; 
    for(var j in myObject['treatmentApplicationGroupDataList'][i]['treatments']) 
     newObj[appGroupId].push(myObject['treatmentApplicationGroupDataList'][i]['treatments'][j]['treatmentId']) 
} 

//newObj will contain the required Json. 

第一for循环会遍历treatmentApplicationGroupDataList,然后在该循​​环将得到applicationGroupId此列表,并作出新对象因为它的key作为applicationGroupIdvalue作为array下一个嵌套的for循环将遍历所有的treatments在该组中提取treatmentId,并将它们推入上述for循环中创建的array

2

下面是对foreach功能的一个很好的解释,您可以使用:https://stackoverflow.com/a/9329476/4693496

鉴于你的下列对象:

{ 
    "treatmentApplicationGroupDataList": [ 
     { 
      "applicationGroupId": 879545457291368, 
      "treatments": 
       [ 
        { 
         "treatmentId": 879545457291370 
        } 
       ] 
     }, 
     { 
      "applicationGroupId": 879545447124032, 
      "treatments": [ 
       { 
        "treatmentId": 879545447124036 
       }, 
       { 
        "treatmentId": 879545447124034 
       } 
      ] 
     } 
    ] 
} 

您可以使用以下功能:

myObject.treatmentApplicationGroupDataList.forEach(function(item) { 
    document.write(item.applicationGroupId); 
    item.treatments.forEach(function(treatment) { 
     document.write(treatment.treatmentId); 
    }); 
});