将键值对映射到javascript对象

时间:2014-09-11 10:24:01

标签: javascript

我想将服务调用中的数据映射到java脚本对象,同样的javascript对象将传递给图表api

javascript数组的单一数据格式应该是这样的

var val2 = {
        label: 'Data Seg2',
        data: [[0, 10]]

};

它也可以有多个数据值,如下所示

var val3 = {
        label: 'Data Seg2',
        data: [[0, 10], [1, 20],[2, 30],[3, 40],[4, 50]]
    };

Tha main Array看起来像这样

var datatest = [{
            label: 'First Label',
            data: [[0, 30]]
        }, {
            label: 'Second Label',
            data: [[0, 20]]
        }, {
            label: 'Third Label',
            data: [[0, 50]]
        }, {
            label: 'Fourth Label',
            data: [[0, 10]]
        }];

现在我的服务都是这样的结果。

{"d":"[{\"label\":\"Lable1\",\"data\":[{\"Key\":\"0\",\"Value\":\"108859\"}]},{\"label\":\"Lable2\",\"data\":[{\"Key\":\"0\",\"Value\":\"20493248.94\"}]},{\"label\":\"Label3\",\"data\":[{\"Key\":\"0\",\"Value\":\"1195\"}]}]"}

现在我想将此结果映射为“datatest”格式

我该怎么做?

提前致谢

3 个答案:

答案 0 :(得分:0)

您可以使用jQuery.map()这样的功能:

var serverJSON = {"d":"[{\"label\":\"Lable1\",\"data\":[{\"Key\":\"0\",\"Value\":\"108859\"}]},{\"label\":\"Lable2\",\"data\":[{\"Key\":\"0\",\"Value\":\"20493248.94\"}]},{\"label\":\"Label3\",\"data\":[{\"Key\":\"0\",\"Value\":\"1195\"}]}]"};
var serverData = JSON.parse(serverJSON.d);
var datatest= $.map(serverData, function(arrayItem) {
    return {
        label: arrayItem.label,
        data: $.map(arrayItem.data, function(dataItem) {
            return [[parseFloat(dataItem.Key), parseFloat(dataItem.Value)]];
        })
    };
});

结果是:

[{"label":"Lable1","data":[[0,108859]]},{"label":"Lable2","data":[[0,20493248.94]]},{"label":"Label3","data":[[0,1195]]}]

Working demo.

答案 1 :(得分:0)

你的数据有点奇怪,无论如何......

var rawData = {"d":"[{\"label\":\"Lable1\",\"data\":[{\"Key\":\"0\",\"Value\":\"108859\"}]},{\"label\":\"Lable2\",\"data\":[{\"Key\":\"0\",\"Value\":\"20493248.94\"}]},{\"label\":\"Label3\",\"data\":[{\"Key\":\"0\",\"Value\":\"1195\"}]}]"};    
var dataSet = JSON.parse(rawData.d); 

var fn = function(data){ 
    data.data = data.data.map(function(d){
        return [d.Key, d.Value];
    });
    return data;
};

var newSet = dataSet.map(fn); // what you want

结果:

[
    {
        "label": "Lable1",
        "data": [
            [
                "0",
                "108859"
            ]
        ]
    },
    {
        "label": "Lable2",
        "data": [
            [
                "0",
                "20493248.94"
            ]
        ]
    },
    {
        "label": "Label3",
        "data": [
            [
                "0",
                "1195"
            ]
        ]
    }
]

它会做到这一点。不确定是否还有其他优雅的方法。

PS:建议首先通过http://jsonformat.com/左右格式化你的json字符串

答案 2 :(得分:0)

使用纯JavaScript可以执行此操作:

mapthis = {"d":"[{\"label\":\"Lable1\",\"data\":[{\"Key\":\"0\",\"Value\":\"108859\"}]},{\"label\":\"Lable2\",\"data\":[{\"Key\":\"0\",\"Value\":\"20493248.94\"}, {\"Key\":\"1\",\"Value\":\"1111111.94\"}]},{\"label\":\"Label3\",\"data\":[{\"Key\":\"0\",\"Value\":\"1195\"}]}]"};

var x = eval(mapthis.d);
var newdatatest = [];
for(var i=0; i<x.length; i++){
    var datas = [];
    for(var j=0; j<x[i].data.length;j++){
        datas.push([x[i].data[j].Key, x[i].data[j].Value]);
    }
    newdatatest.push( {label:x[i].label, data:datas} );
}
console.log(JSON.stringify(newdatatest,null,2));

结果:

[
  {
    "label": "Lable1",
    "data": [
      [
        "0",
        "108859"
      ]
    ]
  },
  {
    "label": "Lable2",
    "data": [
      [
        "0",
        "20493248.94"
      ],
      [
        "1",
        "1111111.94"
      ]
    ]
  },
  {
    "label": "Label3",
    "data": [
      [
        "0",
        "1195"
      ]
    ]
  }
]