[英]JSON object - changing a property name for all children recursively
我有以下json對象。
myJsonObj = {
"name":"Laptop",
"type":"hardware computer laptop",
"forward":[
{
"name":"Depends On",
"forward":[
{
"name":"test asset 1",
"type":"hardware",
"link":"somelink"
}
]
},
{
"name":"somename",
"forward":[
{
"name":"test asset 5",
"type":"hardware",
"link":"somelink"
}
]
}
],
"inverse":[
{
"name":"somename",
"inverse":[
{
"name":"test asset 4",
"ciTypeCls":"hardware",
"link":"somelink"
},
{
"name":"test asset 1",
"ciTypeCls":"hardware",
"link":"somelink"
}
]
},
{
"name":"somename",
"inverse":[
{
"name":"test asset 1",
"ciTypeCls":"hardware",
"link":"somelink"
}
]
}
]
}
我試圖改變屬性名稱forward
到children
。
以下是我的代碼
myJsonObj = { "name": "Laptop", "type": "hardware computer laptop", "forward": [{ "name": "Depends On", "forward": [{ "name": "test asset 1", "type": "hardware", "link": "somelink" }] }, { "name": "somename", "forward": [{ "name": "test asset 5", "type": "hardware", "link": "somelink" }] }], "inverse": [{ "name": "somename", "inverse": [{ "name": "test asset 4", "ciTypeCls": "hardware", "link": "somelink" }, { "name": "test asset 1", "ciTypeCls": "hardware", "link": "somelink" }] }, { "name": "somename", "inverse": [{ "name": "test asset 1", "ciTypeCls": "hardware", "link": "somelink" }] }] } jQuery.each(myJsonObj, function(e) { e.children = e.forward; delete e.forward; }); console.log(myJsonObj);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
它似乎不起作用,我在做什么錯?
嘗試這個:
jQuery.each(myJsonObj.forward, function(i , item) {
//Nested forward
item.children = item.forward;
delete item.forward;
});
//PARENT forward
myJsonObj.children = myJsonObj.forward;
delete myJsonObj.forward;
JSFiddle https://jsfiddle.net/xbkp10Ly/
根據您當前的JSON結構,簡單的“查找和替換”即可工作。
var myJsonObj = { "name": "Laptop", "type": "hardware computer laptop", "forward": [{ "name": "Depends On", "forward": [{ "name": "test asset 1", "type": "hardware", "link": "somelink" }] }, { "name": "somename", "forward": [{ "name": "test asset 5", "type": "hardware", "link": "somelink" }] }], "inverse": [{ "name": "somename", "inverse": [{ "name": "test asset 4", "ciTypeCls": "hardware", "link": "somelink" }, { "name": "test asset 1", "ciTypeCls": "hardware", "link": "somelink" }] }, { "name": "somename", "inverse": [{ "name": "test asset 1", "ciTypeCls": "hardware", "link": "somelink" }] }] } document.write('<pre>' + JSON.stringify(myJsonObj).replace(/forward/g, "children") + '</pre>');
更安全,因為它只會檢查屬性而不是價值
JSON.parse(JSON.stringify(myJsonObj).replace(/forward(?=\":)/g,"children"))
檢查此鏈接
這是一個以遞歸樣式對對象和數組進行迭代的提議。
它使用深度優先搜索 ,因為實際節點必須保留,直到訪問所有從屬節點為止。
var obj = { "name": "Laptop", "type": "hardware computer laptop", "forward": [{ "name": "Depends On", "forward": [{ "name": "test asset 1", "type": "hardware", "link": "somelink" }] }, { "name": "somename", "forward": [{ "name": "test asset 5", "type": "hardware", "link": "somelink" }] }], "inverse": [{ "name": "somename", "inverse": [{ "name": "test asset 4", "ciTypeCls": "hardware", "link": "somelink" }, { "name": "test asset 1", "ciTypeCls": "hardware", "link": "somelink" }] }, { "name": "somename", "inverse": [{ "name": "test asset 1", "ciTypeCls": "hardware", "link": "somelink" }] }] }; function replaceProperty(o, from, to) { function f(r, p) { if (Array.isArray(r[p])) { iterA(r[p]); } if (typeof r[p] === 'object') { iterO(r[p]); } if (p === from) { r[to] = r[from]; delete r[from]; } } function iterO(o) { Object.keys(o).forEach(function (k) { f(o, k); }); } function iterA(a) { a.forEach(function (_, i, aa) { f(aa, i); }); } iterO(o); } replaceProperty(obj, 'forward', 'children'); document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.