2015-07-20 163 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); 
    }); 
});