JavaScript - 处理和重组JSON无法正常工作

时间:2015-11-18 10:51:07

标签: javascript jquery arrays json

我正在尝试处理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

有人可以帮忙,因为我无法理解这一点:(

非常感谢

1 个答案:

答案 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>');