想要使用Javascript将一个JSON对象拆分为多个JSON对象

我有一个JSON响应如下,

[{label: "8", value: "1", value2: "0", value3: "0"},{label: "9", value: "7", value2: "2", value3: "6"},{label: "10", value: "12", value2: "1", value3: "0"},…] 

现在我想将它分成每个键的4个JSON对象,如下所示。

 [{label: "8"},{label: "9"},{label: "10"},…] [{value: "1"},{value: "7"},{value: "12"},…] [{value2: "0"},{value2: "2"},{value2: "1"},…] and more 

我尝试了下面的东西,但没有成功。

Try1:

 var o2 = { uhash: o.uhash }; delete o.uhash; 

Try2:

使用for循环来获取每对,array.push和JSON.stringigy()方法。

我想要的是使用数据库中的JSON响应创建堆叠的fusioncharts

您可以创建一个返回所需数组的函数:然后您可以映射并在JSON中的属性上调用它:

 function makeArray(value) { return j.map(function(a) { return {[value]: a[value]}; }); } var labels = makeArray('label'); 

工作实例

您可以像这样使用reduce并返回数组

 var data = [{label: "8", value: "1", value2: "0", value3: "0"},{label: "9", value: "7", value2: "2", value3: "6"},{label: "10", value: "12", value2: "1", value3: "0"}] var result = data.reduce(function(ar, e) { ar[0] = (ar[0] || []).concat({label: e.label}); ar[1] = (ar[1] || []).concat({value: e.value}); ar[2] = (ar[2] || []).concat({value2: e.value2}); ar[3] = (ar[3] || []).concat({value3: e.value3}); return ar; }, []) console.log(result) 

为什么我没有使用Array.prototype.map或Object.keys,因为在IE8中,这种方法不起作用。 要使它们工作,需要在代码中添加Pollyfill。 所以这是你的解决方案,而不使用它们

 var yourData = [ { "label": "8", "value": "1", "value2": "0", "value3": "0" }, { "label": "9", "value": "7", "value2": "2", "value3": "6" }, { "label": "10", "value": "12", "value2": "1", "value3": "0" } ]; var convertData = function(data) { var newData = [], dataLnth = data.length; //dynamically creating the array depending on arraySize for(var i = 0; i<=dataLnth; i++) newData.push([]); //create the data for(var index=0; index 

您可以使用Array#forEach()并构建包含所需属性的新对象。

 var array = [{ label: "8", value: "1", value2: "0", value3: "0" }, { label: "9", value: "7", value2: "2", value3: "6" }, { label: "10", value: "12", value2: "1", value3: "0" }], keys = ['label', 'value', 'value2', 'value3'], grouped = {}; array.forEach(function (a) { keys.forEach(function (k) { var o = {}; o[k] = a[k]; grouped[k] = grouped[k] || []; grouped[k].push(o); }); }); document.write('
' + JSON.stringify(grouped, 0, 4) + '

');

我喜欢map()和getOwnPropertyNames(),尽管其他答案可能同样好。

 var data = [ { "label": "8", "value": "1", "value2": "0", "value3": "0" }, { "label": "9", "value": "7", "value2": "2", "value3": "6" }, { "label": "10", "value": "12", "value2": "1", "value3": "0" } ]; var results = data.map(function(item) { var retval = []; Object.getOwnPropertyNames(item).forEach(function(val, idx, array) { retval.push({ [val]: item[val] }); }); return retval; }); console.log(JSON.stringify(results));