簡體   English   中英

Javascript-如何從字典列表中創建嵌套的json

[英]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#reduceObject.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM