[英]Javascript - how to create nested json from list of dictionaries
我正在努力從字典/數組列表創建嵌套結構。 我有數據,我需要用它來構建一個JSON-ish對象。
var data = [
{"Customer":"C1", "Code":"0001","Sales Invoice":"SINV1","Amt":100, "Sales Person":"S1"},
{"Customer":"C1", "Code":"0001","Sales Invoice":"SINV2","Amt":200, "Sales Person":"S1"},
{"Customer":"C2", "Code":"0002","Sales Invoice":"SINV3","Amt":200, "Sales Person":"S1"},
{"Customer":"C3", "Code":"0003","Sales Invoice":"SINV4","Amt":100, "Sales Person":"S2"},
{"Customer":"C4", "Code":"0004","Sales Invoice":"SINV5","Amt":300, "Sales Person":"S2"}
];
預期產量:
[{
"Sales Person": "S1",
"Data": [{
"Customer": "C1",
"Data": [{
"Sales Invoice": "SINV1",
"Amt": 100
},
{
"Sales Invoice": "SINV2",
"Amt": 200
}
],
"Code": "0001"
},
{
"Customer": "C2",
"Data": [{
"Sales Invoice": "SINV3",
"Amt": 200
}],
"Code": "0001"
}
]
},
{
"Sales Person": "S2",
"Data": [{
"Customer": "C3",
"Data": [{
"Sales Invoice": "SINV4",
"Amt": 100
}],
"Code": "0003"
},
{
"Customer": "C4",
"Data": [{
"Sales Invoice": "SINV4",
"Amt": 300
}],
"Code": "0004"
}
]
}
]
提前感謝您的幫助。
您可以使用reduce
組織/匯總數據
並使用map
進行格式化。
var data = [{"Customer":"C1", "Code":"0001","Sales Invoice":"SINV1","Amt":100, "Sales Person":"S1"},{"Customer":"C1", "Code":"0001","Sales Invoice":"SINV2","Amt":200, "Sales Person":"S1"}, {"Customer":"C2", "Code":"0002","Sales Invoice":"SINV3","Amt":200, "Sales Person":"S1"}, {"Customer":"C3", "Code":"0003","Sales Invoice":"SINV4","Amt":100, "Sales Person":"S2"},{"Customer":"C4", "Code":"0004","Sales Invoice":"SINV5","Amt":300, "Sales Person":"S2"}]; var newData = Object.values(data.reduce((c,v)=>{ c[v["Sales Person"]] = c[v["Sales Person"]] || {"Sales Person" : v["Sales Person"], "Data" : {}}; c[v["Sales Person"]]["Data"][ v["Code"] ] = c[v["Sales Person"]]["Data"][ v["Code"] ] || { Customer : v["Customer"],"Data": [], Code: v["Code"] } c[v["Sales Person"]]["Data"][ v["Code"] ].Data.push( {"Sales Invoice": v["Sales Invoice"],"Amt": v["Amt"]} ); return c; },{})).map(v=>{ v.Data = Object.values( v.Data ); return v; }); console.log( newData );
您可以將array#reduce
與Object.values()
。 首先根據“ Sales Person
對數據進行分組,然后使用“ Customer
價值”對數據進行分組。 然后使用array#forEach
提取Data
所有Customer
值。
var data = [{"Customer":"C1", "Code":"0001","Sales Invoice":"SINV1","Amt":100, "Sales Person":"S1"},{"Customer":"C1", "Code":"0001","Sales Invoice":"SINV2","Amt":200, "Sales Person":"S1"},{"Customer":"C2", "Code":"0002","Sales Invoice":"SINV3","Amt":200, "Sales Person":"S1"},{"Customer":"C3", "Code":"0003","Sales Invoice":"SINV4","Amt":100, "Sales Person":"S2"},{"Customer":"C4", "Code":"0004","Sales Invoice":"SINV5","Amt":300, "Sales Person":"S2"}]; var result = Object.values(data.reduce((r,o) => { r[o['Sales Person']] = r[o['Sales Person']] || {'Sales Person' : o['Sales Person'], Data : {} }; r[o['Sales Person']].Data[o.Customer] = r[o['Sales Person']].Data[o.Customer] || {Data: [], Code: o.Code} r[o['Sales Person']].Data[o.Customer].Data.push({'Sales Invoice': o['Sales Invoice'], Amt : o['Amt']}); return r; },{})); result.forEach(o => { o.Data = Object.values(o.Data); }); console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.