JSON数组元素作为单个数组

JSON array elements as individual array

本文关键字:单个 数组 数组元素 JSON      更新时间:2023-09-26

假设我有一个类似结构的JSON

[{
    "name": "name1",
    "custitem_color": "3",
    "custitem_ribbon": "1",
    "baseprice": "10.00",
    "cost": "12.00"
}, {
    "name": "name2",
    "custitem_color": "4",
    "custitem_ribbon": "2",
    "baseprice": "20.00",
    "cost": "15.00"
}, {
    "name": "name3",
    "custitem_color": "6",
    "custitem_ribbon": "3",
    "baseprice": "30.00",
    "cost": "22.00"
}, {
    "name": "name4",
    "custitem_color": "8",
    "custitem_ribbon": "4",
    "baseprice": "40.00",
    "cost": "18.00"
}]

我想生成如下的输出

"name": ["name1","name2","name3"],  
"custitem_color":["3","4","6","8"]

我搜索了SO,但没有找到这种类型的匹配项。我很想知道是否有任何库或解决方法可以像上面提到的那样,将所有键的值作为一个单独的数组。任何建议或对任何资源的说明都将不胜感激。

您可以使用两个循环来完成此操作。一个在数组中的每个对象上循环,另一个在每个单独对象的属性上循环。从那里,您可以构建一个包含分组值的新对象。试试这个:

var output = {};
for (var i = 0; i < data.length; i++) {
    for (var item in data[i]) {
        output[item] ? output[item].push(data[i][item]) : output[item] = [data[i][item]];
    }
}

小提琴示例

这种方法的优点是完全不知道输入对象的格式。如果添加新属性,或者格式是动态的,则代码将不需要任何更改。

试试这个

var result = {},
    len    = data.length, i, prop;
for (i = 0; i < len; i++) {
  for (prop in data[i]) {
    if (!result[prop]) {
      result[prop] = [];
    }
    result[prop].push(data[i][prop]);
  }
}

示例

这个怎么样

var a = [  {"name":"name1", "custitem_color":"3", "custitem_ribbon":"1", "baseprice":"10.00", "cost":"12.00"}, {"name":"name2", "custitem_color":"4", "custitem_ribbon":"2", "baseprice":"20.00", "cost":"15.00"}, {"name":"name3", "custitem_color":"6", "custitem_ribbon":"3", "baseprice":"30.00", "cost":"22.00"}, {"name":"name4", "custitem_color":"8", "custitem_ribbon":"4", "baseprice":"40.00", "cost":"18.00"} ]
var finalobj = {name : [],custitem_color : [],custitem_ribbon : [],baseprice : [],cost : []};
$.each(a,function(pos,val){
    finalobj.name.push(val.name);
    finalobj.custitem_color.push(val.custitem_color);
    finalobj.custitem_ribbon.push(val.custitem_ribbon);
    finalobj.baseprice.push(val.baseprice);
    finalobj.cost.push(val.cost);
})
console.log(finalobj);
var final_json = {"name":[],
           "custitem_color":[],
           "custitem_ribbon":[],
           "baseprice":[],
           "cost":[]
};
var init_json = [  {  
           "name":"name1",
           "custitem_color":"3",
           "custitem_ribbon":"1",
           "baseprice":"10.00",
           "cost":"12.00"
        },
        {  
           "name":"name2",
           "custitem_color":"4",
           "custitem_ribbon":"2",
           "baseprice":"20.00",
           "cost":"15.00"
        },
        {  
           "name":"name3",
           "custitem_color":"6",
           "custitem_ribbon":"3",
           "baseprice":"30.00",
           "cost":"22.00"
        },
        {  
           "name":"name4",
           "custitem_color":"8",
           "custitem_ribbon":"4",
           "baseprice":"40.00",
           "cost":"18.00"
        }
     ] ;

$.each(init_json ,function(pos,val){
    final_json.name.push(val.name);
    final_json.custitem_color.push(val.custitem_color);
    final_json.custitem_ribbon.push(val.custitem_ribbon);
    final_json.baseprice.push(val.baseprice);
    final_json.cost.push(val.cost);
})