2016-04-10 24 views
0

私はDBからJSON配列を持っており、操作したいと思います。現在、それは8つの控えめな要素を持っています。私は2つの要素を得るために配列を操作したい、残りの要素は入れ子になります。私の現在のJSONは、この構造を有する:JSON配列データを操作する

{ 
    "itemId": 1, 
    "desc": [{ 
    "type": "A", 
    "size": "xx", 
    "count": 12, 
    "price": 122 
    }, 
    { 
    "type": "A", 
    "size": "xl", 
    "count": 18, 
    "price": 180 
    }, 
    { 
    "type": "B", 
    "size": "xx", 
    "count": 12, 
    "price": 122 
    }, 
    { 
    "type": "B", 
    "size": "xl", 
    "count": 12, 
    "price": 122 
    }] 
} 

私は、データが次のように来るように操作することにしたい。

{ 
"type": "A", 
    "desc":{ 
    "size": "xx", 
    "count": 12, 
    "price": 122 
    }, 
    { 
    "size": "xl", 
    "count": 12, 
    "price": 122 
    }, 
}, 
    { 
"type": "B", 
    "desc":{ 
    "size": "xx", 
    "count": 12, 
    "price": 122 
    }, 
    { 
    "size": "xl", 
    "count": 12, 
    "price": 122 
    }, 
} 

ちょうど私が欲しい、私は各ループのために使用していますが、これは個々の要素を作成しています結果の配列内の2つの要素 解決方法はありますか?

+3

希望する/出力する 'data-structure/schema'は不正な形式です。それを修正してください。それは '' {{"type": "A"、 "desc":[{...}、{...}}}、{...}] 'でしょうか? – sarbbottam

答えて

1

あなたはこのような何かを試みることができる:あなたが取得する種類が分からない場合は、あなたがオブジェクトを動的に構築することができます

var new_data = { 
    A: {type: 'A', desc: []}, 
    B: {type: 'B', desc: []} 
}; 

$.each(data.desc, function(index, value) { 
    new_data[value.type].desc.push(value); 
}); 

https://jsfiddle.net/5cnaxn04/

var new_data = {}; 

$.each(data.desc, function(index, value) { 
    if(typeof new_data[value.type] === "undefined") { 
    new_data[value.type] = {type: value.type, desc: [value]} 
    } else { 
    new_data[value.type].desc.push(value); 
    } 
}); 

https://jsfiddle.net/5cnaxn04/1/

0

yに構文エラーがあります私たちのコードはArrayObjectの両方に{}を使用しているので、私はそのコンテキストから推測します。データを正確に見せるには、いくつかのループが必要です。

JSFiddleを参照してください。