2015-01-09 2 views
0

에 평면 JSON 문자열 나는 ​​플랫 JSON 파일을JQuery와 - 그룹화 중첩 JQuery와 문자열

[{"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/

지금까지 내가 중첩하지만 데이터를 그룹화하지 않은 - 내가 그룹화 작업을 수행하는 방법을 확실 해요입니다. 돌이 다음,

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

Demo with ommiting the category in the "data" property

답변

0

, 여기에 간단한 방법 최종 배열을 구성하는 객체

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

+0

나는 이미 내 프로젝트에 underscore.js을 가지고 있기 때문에 나는 정답으로이 선택한 - 그래서 이것은 나를 위해 가장 쉬운 대답했다. - 고맙습니다 ! – 2bitcoder

+0

도와 드리겠습니다! 그리고 실제로, @ charlietfl의 대답은 또한 문제를 해결합니다 :) – andrusieczko

0

누구의 키 범주는 임시 객체를 구축하여 작업을 수행 할 수 있습니다 당신이 underscore.js를 사용 괜찮다면

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