我正在尝试处理json文件并创建一个新文件,但它不起作用。
旧json的结构是这样的:
[
{
"3":{
"value":2
},
"4":{
"value":1
}
},
{
"3":{
"value":6
},
"4":{
"value":1
}
}...and so on
我要做的是创建一个新的json对象,它只有两个对象0和1,并且每个对象里面都会有来自旧索引的索引3和4的值,这应该看起来像什么像这样:
{
"0":{
"0":[
{
"0":2
}
],
"1":[
{
"0":6
}
]..and so on
},
"1":{
"0":[
{
"0":1
}
],
"1":[
{
"0":1
}
]..and so on
}
}
问题在于,当我处理和烹饪旧的json时,两个索引(0,1)的输出是相同的。我试图将它循环到3和4并将这些值分配给新数组,但事情并不完全正确。
代码的分数:
//loop through the keysIndex
for (var c in keysIndex) {
//the new json has to be 2 objects, hence the below
newData[c] = {};
var vallueArr = [];
var newObj = {
0: oldData[i][keysIndex[c]].value
}
vallueArr.push(newObj);
objInNewData[entries] = vallueArr;
//the problem is somehwere here, it is appending twice the same
//objInNewData and not both 3 and 4 individually
newData[c] = objInNewData;
}
她是完整的逻辑:PLUNKER
有人可以帮忙,因为我无法理解这一点:(
非常感谢
答案 0 :(得分:1)
正如我上面提到的,使用对象的键索引不是一个好主意,因为Javascript中的对象没有定义的顺序。对于订购的商品,我建议使用数组。
var data = [
{
"3": { "value": 2 },
"4": { "value": 1 }
}, {
"3": { "value": 6 },
"4": { "value": 1 }
}
],
keys = Object.keys(data[0]), // <-- ATTENTION!
obj = {};
data.forEach(function (a, i) {
keys.forEach(function (k, j) {
obj[j] = obj[j] || {};
obj[j][i] = obj[j][i] || [];
obj[j][i].push({ '0': a[k].value });
});
});
document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');