将包含对象的JSON个对象转换为对象数组
Convert JSON object containing objects into an array of objects
我的数据目前以这种格式存储,存储在 JSON 文件中:
{
"name": {
"0": ______,
"1": ______,
"2": ______
},
"xcoord": {
"0": ______,
"1": ______,
"2": ______
},
"ycoord": {
"0": ______,
"1": ______,
"2": ______
}
}
我需要将它转换成这种格式,作为一个对象数组:
[
{
"id": 0,
"name": _____,
"xcoord": _____,
"ycoord": _____
},
{
"id": 1,
"name": _____,
"xcoord": _____,
"ycoord": _____
},
{
"id": 2,
"name": _____,
"xcoord": _____,
"ycoord": _____
}
]
如您所见,我还需要采用第一种数据格式中的数字键,并使它们成为第二种数据格式中的 "id" 值。 (由于对象在数组中的位置和 ID 号匹配,也许这将是创建 "id" 键的另一种方法?)然后我会将我的第二种数据格式存储到一个局部变量中以在我的JS代码。
关于如何执行此操作的任何想法?我不太擅长重组这种数据。
这可以用两个叠瓦状的 .forEach()
:
来完成
var obj = {
"name": {
0: 'name0',
1: 'name1',
2: 'name2'
},
"xcoord": {
0: 'xcoord0',
1: 'xcoord1',
2: 'xcoord2'
},
"ycoord": {
0: 'ycoord0',
1: 'ycoord1',
2: 'ycoord2'
}
};
var res = [];
Object.keys(obj).forEach(k => {
Object.keys(obj[k]).forEach(v => {
(res[v] = (res[v] || { id: v }))[k] = obj[k][v];
});
});
console.log(res);
注:
这一行...
(res[v] = (res[v] || { id: v }))[k] = obj[k][v]
... 是一个简短的方法:
if(!res[v]) {
// if this record doesn't exist yet,
// create it with its implied 'id' property
res[v] = { id: v };
}
// add property 'k' to this record
res[v][k] = obj[k][v];
我的数据目前以这种格式存储,存储在 JSON 文件中:
{
"name": {
"0": ______,
"1": ______,
"2": ______
},
"xcoord": {
"0": ______,
"1": ______,
"2": ______
},
"ycoord": {
"0": ______,
"1": ______,
"2": ______
}
}
我需要将它转换成这种格式,作为一个对象数组:
[
{
"id": 0,
"name": _____,
"xcoord": _____,
"ycoord": _____
},
{
"id": 1,
"name": _____,
"xcoord": _____,
"ycoord": _____
},
{
"id": 2,
"name": _____,
"xcoord": _____,
"ycoord": _____
}
]
如您所见,我还需要采用第一种数据格式中的数字键,并使它们成为第二种数据格式中的 "id" 值。 (由于对象在数组中的位置和 ID 号匹配,也许这将是创建 "id" 键的另一种方法?)然后我会将我的第二种数据格式存储到一个局部变量中以在我的JS代码。
关于如何执行此操作的任何想法?我不太擅长重组这种数据。
这可以用两个叠瓦状的 .forEach()
:
var obj = {
"name": {
0: 'name0',
1: 'name1',
2: 'name2'
},
"xcoord": {
0: 'xcoord0',
1: 'xcoord1',
2: 'xcoord2'
},
"ycoord": {
0: 'ycoord0',
1: 'ycoord1',
2: 'ycoord2'
}
};
var res = [];
Object.keys(obj).forEach(k => {
Object.keys(obj[k]).forEach(v => {
(res[v] = (res[v] || { id: v }))[k] = obj[k][v];
});
});
console.log(res);
注:
这一行...
(res[v] = (res[v] || { id: v }))[k] = obj[k][v]
... 是一个简短的方法:
if(!res[v]) {
// if this record doesn't exist yet,
// create it with its implied 'id' property
res[v] = { id: v };
}
// add property 'k' to this record
res[v][k] = obj[k][v];