2015-09-06 88 views
0

這應該是容易的,但由於某種原因,我堅持 -循環在JSON數組,並創建一個JSON字符串

,如果我有這樣的JSON,需要將其轉換:

{ data : [ 
{id : data1, name : "Description"}, 
{id : data2, name : "Contribution"}, 
{id : data3, name : "Footer"}, 
]} 

成這樣的東西?

{ 
data : [ 
    { data1: "Description" , data2: "Contribution", data3: "Footer" }, 
    ]} 

感謝, 斯圖爾特

+0

這不是有效的JSON。 – Guffa

回答

2

Array.prototype.reduce應該做的工作:

var obj = { 
 
     data: [ 
 
      { id: 'data1', name: 'Description' }, 
 
      { id: 'data2', name: 'Contribution' }, 
 
      { id: 'data3', name: 'Footer' }, 
 
     ] 
 
    }; 
 

 
obj.data = obj.data.reduce(function (r, a) { 
 
    r[a.id] = a.name; 
 
    return r; 
 
}, {}); 
 

 
document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');

1

您可以使用for循環陣列上。

var newData = []; 

for(var i=0;i<data['data'].length;i++){ 
    var obj={}; 
    obj[data['data'][i]['id']]=data['data'][i]['name']; 
    newData.push(obj); 
} 
console.log(newData); 

參考fiddle

更新回答

var newArray = data['data'].map(function(obj){  
    var rObj = {}; 
    rObj[obj.id] = obj.name; 
    return rObj; 
}); 

可以使用Array.map法也。

參考fiddle-map

0

你可以嘗試使用underscore.js庫。

然後檢查這個例子爲你想要的結果Group By

享受;-)

+0

考慮使用_.pluck來獲取組之前的nedded值 – EfiBN

0
var array=[]; 
for(int i=0; i<data.length; i++){ 
var object={}; 
object[data[i].id=data[i].name]; 
array.push(obj); 
} 
0

你幾乎可以在一個單一的線使用lodash做到這一點:

var obj1 = { data : [ 
 
    {id: "data1", name: "Description"}, 
 
    {id: "data2", name: "Contribution"}, 
 
    {id: "data3", name: "Footer"}, 
 
]}; 
 
    
 
var obj2 = { 
 
    data: _.zipObject(_.pluck(obj1.data, "id"), 
 
        _.pluck(obj1.data, "name")) 
 
} 
 

 
document.write(JSON.stringify(obj2, null, 2));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>

看看_.pluck_.zipObject。 您也可以使用underscore,但lodash速度更快,更完整,並且您可以只根據需要創建自定義構建。