jquery - 扁平 json 字符串到分组嵌套 jquery 字符串

jquery - a flat json string to a grouped nested jquery string

我有一个平面 json 文件

[{"Category":"WO","cfg_item":"WO10018","ID":43,"SortOrder":43},
{"Category":"Milestone Status","cfg_item":"Open","ID":23,"SortOrder":1},
{"Category":"Milestone Status","cfg_item":"Complete","ID":24,"SortOrder":2},
{"Category":"Milestone Status","cfg_item":"Ready","ID":218,"SortOrder":0},
{"Category":"Milestone Health","cfg_item":"Green","ID":14752,"SortOrder":0},
{"Category":"Milestone Health","cfg_item":"Amber","ID":14753,"SortOrder":1}]

我想使用 jquery.

像这样对文件进行分组和嵌套
[
   {
      "Category":"Milestone Health",
      "data":[
         {
            "ID":14752,
            "cfg_item":"Green",
            "SortOrder":0
         },
         {
            "ID":14753,
            "cfg_item":"Amber",
            "SortOrder":1
         }
      ]
   },
   {
      "Category":"Milestone Status",
      "data":[
         {
            "ID":218,
            "cfg_item":"Ready",
            "SortOrder":0
         },
         {
            "ID":23,
            "cfg_item":"Open",
            "SortOrder":1
         },
         {
            "ID":24,
            "cfg_item":"Complete",
            "SortOrder":2
         }
      ]
   }
]

请在这里找到一个 jsfiddle http://jsfiddle.net/2bitcoder/5dsygone/

到目前为止,我已经嵌套但没有对数据进行分组 - 我不确定如何进行分组。

var newjson = jsondata.map(function (item) {
        var obj = {};
        obj[item.Category] = { cfg_item: item.cfg_item, ID: item.ID, SortOrder: item.SortOrder};
        return obj;
    });

如果您不介意使用 underscore.js,这里有一个简单的方法:

_.map(_.groupBy(collection, "Category"), function(value, key) {
  return {
    "Category": key,
    "data": value
  }
});

Demo with ommiting the category in the "data" property

可以通过构建一个以类别为键的临时对象,然后遍历该对象来构建最终数组来实现

var tmp = {}, newjson = [];

$.each(jsondata, function(_, item){
    if(!tmp[item.Category] ){
        tmp[item.Category] = [];
    }        
    tmp[item.Category].push( item);  
    delete item.Category;  
});

$.each( tmp, function( category, dataArr){        
    newjson.push({Category: category, data: dataArr})
});

DEMO