2015-06-24 3 views
0

Мне нужно найти и обновить объект json из вложенного объекта json. Рассмотрим оригинальный json-объект.Найти и обновить вложенное значение JSON

var originaldata=[ 
    { 
    "sc_iden": "331", 
    "sc_name": "Scene 1", 
    "sc_type": "", 
    "sc_status": "Draft", 
    "sc_owner": "", 
    "children": [ 
     { 
      "sc_iden": "332", 
      "Sc_name": "Scene1.1", 
      "sc_type": "", 
      "sc_status": "Draft", 
      "sc_priority": "3", 
      "sc_owner": "", 
      "children": [] 
     } 
    ] 
}, 
{ 
    "sc_iden": "334", 
    "sc_name": "Scene2", 
    "sc_type": "", 
    "sc_status": "Draft", 
    "sc_priority": "2", 
    "sc_owner": "", 
    "children": [] 
}] 

Найти ниже findUpdate record from originaldata (JSON) и обновить их значения.

var findUpdate = { 
      "sc_iden": "332", 
      "Sc_name": "My Scene", 
      "sc_type": "New Type", 
      "sc_status": "Opened", 
      "sc_priority": "5", 
      "sc_owner": "Admin", 
      "children": [] 
     } 

На основе sc_iden = "332" поиск в originaldata и обновить новые значения (findUpdate) с помощью JQuery или angularjs.

+3

Что вы попробовали? – doldt

+0

Я устал от следующей ссылки, но здесь они обновляют только одно значение, но мне нужно обновить все записи. http://stackoverflow.com/questions/17993296/find-and-update-in-nested-json-object-without-changing-the-same-key-pair-value-i – ipln

+0

Попробуйте Linq.js. Тебе это понравится! –

ответ

0

Проверьте вывод на консоль (в примере только Sc_name изменена):

var originaldata=[ 
 
    { 
 
    "sc_iden": "331", 
 
    "sc_name": "Scene 1", 
 
    "sc_type": "", 
 
    "sc_status": "Draft", 
 
    "sc_owner": "", 
 
    "children": [ 
 
     { 
 
      "sc_iden": "332", 
 
      "Sc_name": "Scene1.1", 
 
      "sc_type": "", 
 
      "sc_status": "Draft", 
 
      "sc_priority": "3", 
 
      "sc_owner": "", 
 
      "children": [] 
 
     } 
 
    ] 
 
}, 
 
{ 
 
    "sc_iden": "334", 
 
    "sc_name": "Scene2", 
 
    "sc_type": "", 
 
    "sc_status": "Draft", 
 
    "sc_priority": "2", 
 
    "sc_owner": "", 
 
    "children": [] 
 
}]; 
 

 
var findUpdate = { 
 
      "sc_iden": "332", 
 
      "Sc_name": "My Scene", 
 
      "sc_type": "New Type", 
 
      "sc_status": "Opened", 
 
      "sc_priority": "5", 
 
      "sc_owner": "Admin", 
 
      "children": [] 
 
     } 
 

 
for (i in originaldata) { 
 
    var obj = originaldata[i]; 
 
    if (obj['sc_iden'] == '332') { 
 
    obj['Sc_name'] = findUpdate['Sc_name']; 
 
    //... 
 
    } else { 
 
    for (m in obj['children']) { 
 
     var k = obj['children'][m]; 
 
     if (k['sc_iden'] == '332') { 
 
     k['Sc_name'] = findUpdate['Sc_name']; 
 
     //... 
 
     } 
 
    } 
 
    } 
 
} 
 

 
console.log(originaldata);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

0

Посмотрите на эту plunker.

var update = function(jsonArray, updatedJson) { 

    if (jsonArray.length !== 0) { 
    jsonArray.forEach(function(obj) { 
     if (obj.sc_iden === updatedJson.sc_iden) { 
     obj.sc_name = updatedJson.sc_name; 
     //....update 
     } else { 
     //try to update children 
     update(obj.children, updatedJson); 
     } 
    }); 
    } 
}; 

Он изменит исходные данные, поэтому сохраните копию, если вам это еще нужно.

Смежные вопросы