2012-11-26 33 views
0

需要一些JSON幫助。 我與JSON類似這樣的工作:使用Javascript中的值刪除父JSON

{ 
    GreatGrandfather: { 
     GrandFather: { 
      Father: [ 
       { 
        Son: [ 
         { 
          Name: "Abu Nazir", 
          Detail: { 
           Class: "3rd Grade" 
          } 
         }, 
         { 
          Name: "Dexter", 
          Detail: { 
           Class: "6th Grade" 
          } 
         }, 
         { 
          Name: "Rick", 
          Detail: { 
           Class: "11th Grade" 
          } 
         } 
        ] 
       }, 
       { 
        Son: [ 
         { 
          Name: "Tom Walker", 
          Detail: { 
           Class: "3rd Grade" 
          } 
         }, 
         { 
          Name: "Sgt Bastisa", 
          Detail: { 
           Class: "6th Grade" 
          } 
         }, 
         { 
          Name: "The Governer", 
          Detail: { 
           Class: "11th Grade" 
          } 
         } 
        ] 
       } 
      ] 
     } 
    } 
} 

我的問題是我怎麼刪除有「第三級」的類值的兒子? 所以Abu Nazir和Tom Walker都將被刪除,每個父親只有2個兒子?

另外,我將如何添加兒子給父親?

{Name: "Stewie",Detail: {Class:"Kindergarden"}} 

{Name: "Peter",Detail: {Class:"1st Grade"}} 

謝謝!

+5

JSON是隻是文字。你解碼到任何你的主機平臺/語言的本地數據類型,然後在那裏進行操作。然後重新編碼爲json。直接操縱json字符串可能會破壞整個事情。 –

+0

你有什麼反對三年級的? – jbabey

+0

我怎麼會在JavaScript/jQuery中做到這一點? – user1175857

回答

1
var obj = JSON.parse(jsonstring); 
obj.GreatGrandFather.GrandFather.Father.forEach(function(father) { 
    var sons = father.Son.filter(function(son) { 
     return son.Details.Class != "3rd Grade"; 
    }); 
    sons.push({Name: "Stewie",Detail: {Class:"Kindergarden"}}); 
    sons.push({Name: "Peter",Detail: {Class:1st Grade}}); 
    father.Son = sons; 
}); 
var newjson = JSON.stringify(obj); 

當然,你可以用循環來代替ES5.1迭代器的功能,但我認爲你會理解這個概念。

+0

謝謝bergi!這也會起作用 – user1175857

1

在JavaScript中,你會使用JSON.parse你的JSON字符串轉換爲JavaScript對象和操作是:

var parsed = JSON.parse(JSONString); 
var fathers = parsed.GreatGrandfather.GrandFather.Father; 

// loop through the father array, removing sons in 3rd grade 
for (var i = 0; i < fathers.length; i++) { 
    var sons = fathers[i].Son; 

    for (var j = 0; j < sons.length; j++) { 
     // remove the 3rd graders 
     if (sons[j].Detail.Class === '3rd Grade') { 
      sons.splice(j, 1); 
     } 
    } 
} 

// add some sons 
var newSon = { 
    Name: "Stewie", 
    Detail: { 
     Class: "Kindergarden" 
    } 
}; 

fathers[0].Son.push(newSon); 
+0

謝謝jbabey!我喜歡三年級學生! – user1175857