我得到了下一个JSON:
"thing":{
"something":{
"1":1,
"2":2
}
"somethingelse":{
"1":1,
"2":2
}
}
我想将JSON解析为:
"thing":{
"something1": 1,
"something2": 2,
"somethingelse1": 1,
"somethingelse2": 2,
}
正如您所看到的,结果元素的名称是父级和子级的串联。价值是孩子们的价值。任何人都可以帮助我如何在JavaScript中获得此功能?感谢。
答案 0 :(得分:1)
如果只有一级嵌套属性,则可以使用嵌套循环来实现此目的:
var thing = {
"something":{
"1":1,
"2":2
},
"somethingelse":{
"1":1,
"2":2
}
};
var newThing = {};
for (var key in thing) {
for (var subKey in thing[key]) {
newThing[key + subKey] = thing[key][subKey];
}
}
console.log(newThing);
如果你有任意数量的级别,那么递归是可行的方法!
答案 1 :(得分:0)
var jn = {
"test": {
"test": 1,
"testx": 2,
"xtest": {
"x": 1,
"y": 2
},
"test2": 1
},
"xx":{
"x":2,
"y": 3
}
};
var flatJson = function(json, val, obj){
var keys = Object.keys(json);
for(var key in json){
if(Object.keys(json[key]).length > 0){
flatJson(json[key], val + key, obj);
}
else {
obj[val + key] = json[key];
}
}
return obj;
}
/* this is only as an example for your question, you could also call:
flatJson(jn, "", {})
*/
var ret = flatJson(jn["test"], "", {});
var out = {"test": ret }
document.getElementById("out").innerHTML = JSON.stringify(out, undefined, 2);

<pre id="out" ></pre>
&#13;
jn [...]是一些测试数据。该函数将简单地遍历键,并且只有在没有键时它才会获取该值并将其添加到变量obj中。否则,它将使用附加到实际键的先前键的参数和将包含该对象的obj变量来递归调用flatJson。
由于数组没有为每个元素指定显式名称,因此它由索引隐式命名,默认情况下为js。
要将它用于你的问题 - 假设你的json被称为var js - 你可以用var out = flatJson(js["Thing"], "", {});
然后var newJs = { "Thing" : out };
来调用它,这会导致问题中的输出。
玩得开心。