我有以下的Json。
我想从此Json数组创建一个新数组。 数组的长度将是此Json对象中“units”的数量。
因此,我需要提取“units”并添加来自父对象的一些数据。
我猜我可能可以做这样的事情:
var myjson = [{
"files": [
{
"domain": "d",
"units": [
{
"key": "key1",
"type": "2"
},
{
"key": "key2",
"type": "2"
},
{
"key": "key3",
"type": "2"
}]
},
{
"domain": "d1",
"units": [
{
"key": "key11",
"type": "2"
},
{
"key": "key12",
"type": "2"
},
{
"key": "key13",
"type": "2"
}]
}]
},
{
"files": [
{
"domain": "d",
"units": [
{
......
我想从此Json数组创建一个新数组。 数组的长度将是此Json对象中“units”的数量。
因此,我需要提取“units”并添加来自父对象的一些数据。
units: [{
domain: "",
type: "",
key: ""
}, {
domain: "",
type: "",
key: ""
},
{
domain: "",
type: "",
key: ""
}
....
];
我猜我可能可以做这样的事情:
var res = [];
myjson.forEach(function(row) {
row.files.forEach(function(tfile) {
tfile.units.forEach(function(unit) {
var testEntity = {
domain: tfile.domain,
type : unit.type,
key: unit.key
};
res.push(testEntity);
});
});
});
但这样阅读起来很困难,而且看起来不太好。我在考虑做类似于:
var RESULT = myjson.map(function(row) {
return row.files.map(function(tfile) {
return tfile.units.map(function(unit) {
return {
domain: tfile.domain,
type : unit.type,
key: unit.key
};
});
});
});
但这不起作用,看起来也不太好。有没有什么方法可以让它工作,可能更具声明性。希望Ramda.js能够帮忙。
一般来说,从任何嵌套的JSON中获取数据的良好方法是什么?
实现类似于:
nestedjson.findAllOnLastlevel(function(item){
return {
key : item.key,
type: type.key,
domain : item.parent.domain}
});
或者以某种方式将此json压缩,使得所有父对象的属性都移动到叶子节点的子对象中。 myjson.flatten("files.units")
jsbin http://jsbin.com/hiqatutino/edit?css,js,console
非常感谢