2013-07-01 68 views
3

我想通過其中一個屬性在JSON中查找子對象,並向該對象添加更多屬性。我不知道如何使用JQuery(或普通的JavaScript)來做到這一點。例如:從以下JSON中,我想找到id爲123-1的類別,然後將另一個類別對象添加爲子對象。謝謝你的幫助。使用其中一個屬性在JSON中查找子對象

JSON:

{ 
"result": { 
    "category": 
     { 
      "id": 123, 
      "name": "cat1", 
      "rules": [ 
       { 
        "rulename": "r1", 
        "regex": "" 
       }, 
       { 
        "rulename": "r2", 
        "regex": "" 
       } 
      ], 
      "category": 
       { 
        "id": "123-1", 
        "name": "cat1-1", 
        "rules": [ 
         { 
          "rulename": "r1-1", 
          "regex": "" 
         } 
        ] 
       }     
     } 

} 

}

的Javascript:

function addSubCategory(catId, anotherCatObj) { 
    //Step1: Find category object with catID in the existing json 
    //Step3: add the supplied object as a child. 
} 

回答

1
function appendCategoryTo(categories, destinationCategoryId, newCategoryToAdd){ 
    var success = false; 
    for (var i = 0; i < categories.length && !success; i++){ 
     var category = categories[i]; 
     if (category.id == destinationCategoryId){ 
      category.category = category.category || []; 
      success = !!category.category.push(newCategoryToAdd); 
     } else if (category.category) { 
      success = appendCategoryTo(category.category, destinationCategoryId, newCategoryToAdd); 
     } 
    } 
    return success; 
} 

你在obj.result.category節點,以利用復發的開始但是您可以輕鬆地將該方法包裝在另一個方法中,使其更有禮貌。

但是,原樣,這裏是一個例子用法:

appendCategoryTo(o.result.category, '123-1', { 
    id: '123-1-1', 
    name: 'cat-1-1-1', 
    rules: [] 
}); 
console.log(JSON.stringify(o)); 

增加了一個新的category屬性到嵌套類別作爲數組(ⅰ假設這如下的命名法),則該元素添加到該新陣列 - 從而給你:

{ 
    "result": { 
    "category": [ 
     { 
     "id": 123, 
     "name": "cat1", 
     "rules": [ 
      { 
      "rulename": "r1", 
      "regex": "" 
      }, 
      { 
      "rulename": "r2", 
      "regex": "" 
      } 
     ], 
     "category": [ 
      { 
      "id": "123-1", 
      "name": "cat1-1", 
      "rules": [ 
       { 
       "rulename": "r1-1", 
       "regex": "" 
       } 
      ], 
      "category": [    // BEGIN new addition 
       { 
       "id": "123-1-1", 
       "name": "cat-1-1-1", 
       "rules": [ 

       ] 
       } 
      ]       // END new addition 
      } 
     ] 
     } 
    ] 
    } 
} 

實例上的jsfiddle一起玩,順便說一句:http://jsfiddle.net/cqRzX/

+0

是什麼目的!?與不使用它不一樣嗎?謝謝。 – M99

+1

@ M99:['Array.push'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push)返回一個整數值,表示元素的數量推後數組。 'success'是一個布爾值。所以,爲了保持布爾值,我使用'!!'。基本上,它就像'!(!0))'這意味着假和'!(!1))'這意味着真實。 (第一個'!'使它成爲一個布爾結果(但是反轉),第二個給了我布爾結果(實際) –

+0

太好了,非常感謝你的快速響應。 – M99

相關問題