在JSON数组处循环并创建单个JSON字符串

时间:2015-09-06 09:35:25

标签: javascript json sapui5

这应该很容易,但出于某种原因,我被困 -

如果我有这样的json并需要转换它:

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

这样的事情?

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

谢谢, 斯图尔特

5 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:0)

您可以尝试使用underscore.js lib。

然后查看此示例以获取所需结果Group By

享受; - )

答案 3 :(得分:0)

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

答案 4 :(得分: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更快,更完整,您可以只使用您需要的内容创建自定义构建。