[英]merge json data with javascript
我得到了一個這樣的 JSON 文件。 我需要合並來自同一個證書名稱的名稱和值。
使用 javascript 執行此操作的最佳方法是什么?
[
{
certname: 'server1',
environment: 'acceptance',
name: 'clientcert',
value: 'server1'
},
{
certname: 'server2',
environment: 'acceptance',
name: 'clientcert',
value: 'server2'
},
{
certname: 'server3',
environment: 'acceptance',
name: 'clientcert',
value: 'server3'
}
],
]
{
certname: 'server1',
environment: 'acceptance',
name: 'operatingsystem',
value: 'windows'
},
{
certname: 'server2',
environment: 'acceptance',
name: 'operatingsystem',
value: 'windows'
},
{
certname: 'server3',
environment: 'acceptance',
name: 'operatingsystem',
value: 'RedHat'
}
],
[
{
certname: 'server1',
environment: 'acceptance',
name: 'operatingsystemmajrelease',
value: '2008 R2'
},
{
certname: 'server2',
environment: 'acceptance',
name: 'operatingsystemmajrelease',
value: '2008 R2'
},
{
certname: 'server3',
environment: 'acceptance',
name: 'operatingsystemmajrelease',
value: '6'
}
],
[
{
certname: 'server1',
environment: 'acceptance',
name: 'clientversion',
value: '5.5.2'
},
{
certname: 'server2',
environment: 'acceptance',
name: 'clientversion',
value: '5.5.2'
},
{
certname: 'server3',
environment: 'acceptance',
name: 'clientversion',
value: '5.5.2'
}
]
我需要合並來自同一個證書名稱的名稱和值。
結果必須是:
var endresult= {
0:{clientcert:"server1", operatingsystem:"windows", operatingsystemmajrelease: "2008 R2", clientversion: 5.5.2},
1:{clientcert:"server2", operatingsystem:"windows", operatingsystemmajrelease: "2008 R2", clientversion: 5.5.2},
2:{clientcert:"server3", operatingsystem:"RedHat", operatingsystemmajrelease: 6, clientversion: 5.5.2},
};
或者
{
clientcert: 'server3',
operatingsystem: 'windows',
operatingsystemmajrelease: '2008 R2',
clientversion: '5.5.2'
},
{
clientcert: 'server2',
operatingsystem: 'windows',
operatingsystemmajrelease: '2008 R2',
clientversion: '5.5.2'
},
{
clientcert: 'server1',
operatingsystem: 'RedHat',
operatingsystemmajrelease: '6',
clientversion: '5.5.2'
},
我不知道合並回 json 格式或合並到 JS 對象是否更容易,這兩種結果都很好。 :-) 我需要將其合並到 SQL 數據庫中,所以我認為 JSON 是最好的結果?
const json = [{certname: 'server1',environment: 'acceptance',name: 'clientcert',value: 'server1'},{certname: 'server2',environment: 'acceptance',name: 'clientcert',value: 'server2'},{certname: 'server3',environment: 'acceptance',name: 'clientcert',value: 'server3'},{certname: 'server1',environment: 'acceptance',name: 'operatingsystem',value: 'windows'},{certname: 'server2',environment: 'acceptance',name: 'operatingsystem',value: 'windows'},{certname: 'server3',environment: 'acceptance',name: 'operatingsystem',value: 'RedHat'},{certname: 'server1',environment: 'acceptance',name: 'operatingsystemmajrelease',value: '2008 R2'},{certname: 'server2',environment: 'acceptance',name: 'operatingsystemmajrelease',value: '2008 R2'},{certname: 'server3',environment: 'acceptance',name: 'operatingsystemmajrelease',value: '6'},{certname: 'server1',environment: 'acceptance',name: 'clientversion',value: '5.5.2'},{certname: 'server2',environment: 'acceptance',name: 'clientversion',value: '5.5.2'},{certname: 'server3',environment: 'acceptance',name: 'clientversion',value: '5.5.2'},]; function format(json){ const data = json.reduce((a, b) => { if(!a[b.certname]) a[b.certname] = {}; a[b.certname][b.name] = b.value; return a; }, {}); return Object.values(data); } console.log(format(json));
編輯:根據更新的問題,輸入拆分為子數組。 要檢查它,您可以:
const json = [[{certname: 'server1',environment: 'acceptance',name: 'clientcert',value: 'server1'},{certname: 'server2',environment: 'acceptance',name: 'clientcert',value: 'server2'},{certname: 'server3',environment: 'acceptance',name: 'clientcert',value: 'server3'}],[{certname: 'server1',environment: 'acceptance',name: 'operatingsystem',value: 'windows'},{certname: 'server2',environment: 'acceptance',name: 'operatingsystem',value: 'windows'},{certname: 'server3',environment: 'acceptance',name: 'operatingsystem',value: 'RedHat'}],[{certname: 'server1',environment: 'acceptance',name: 'operatingsystemmajrelease',value: '2008 R2'},{certname: 'server2',environment: 'acceptance',name: 'operatingsystemmajrelease',value: '2008 R2'},{certname: 'server3',environment: 'acceptance',name: 'operatingsystemmajrelease',value: '6'}],[{certname: 'server1',environment: 'acceptance',name: 'clientversion',value: '5.5.2'},{certname: 'server2',environment: 'acceptance',name: 'clientversion',value: '5.5.2'},{certname: 'server3',environment: 'acceptance',name: 'clientversion',value: '5.5.2'}],]; function format(json){ const data = json.reduce((a,b)=>[...a, ...b], []).reduce((a, b) => { if(!a[b.certname]) a[b.certname] = {}; a[b.certname][b.name] = b.value; return a; }, {}); return Object.values(data); } console.log(format(json));
reduce
內的子數組,如下所示: const json = [[{certname: 'server1',environment: 'acceptance',name: 'clientcert',value: 'server1'},{certname: 'server2',environment: 'acceptance',name: 'clientcert',value: 'server2'},{certname: 'server3',environment: 'acceptance',name: 'clientcert',value: 'server3'}],[{certname: 'server1',environment: 'acceptance',name: 'operatingsystem',value: 'windows'},{certname: 'server2',environment: 'acceptance',name: 'operatingsystem',value: 'windows'},{certname: 'server3',environment: 'acceptance',name: 'operatingsystem',value: 'RedHat'}],[{certname: 'server1',environment: 'acceptance',name: 'operatingsystemmajrelease',value: '2008 R2'},{certname: 'server2',environment: 'acceptance',name: 'operatingsystemmajrelease',value: '2008 R2'},{certname: 'server3',environment: 'acceptance',name: 'operatingsystemmajrelease',value: '6'}],[{certname: 'server1',environment: 'acceptance',name: 'clientversion',value: '5.5.2'},{certname: 'server2',environment: 'acceptance',name: 'clientversion',value: '5.5.2'},{certname: 'server3',environment: 'acceptance',name: 'clientversion',value: '5.5.2'}],]; function format(json){ const data = json.reduce((a, b) => { b.forEach(t => { if(!a[t.certname]) a[t.certname] = {}; a[t.certname][t.name] = t.value; }) return a; }, {}); return Object.values(data); } console.log(format(json));
const data = [{
certname: 'server1',
environment: 'acceptance',
name: 'clientcert',
value: 'server1'
},
{
certname: 'server2',
environment: 'acceptance',
name: 'clientcert',
value: 'server2'
},
{
certname: 'server3',
environment: 'acceptance',
name: 'clientcert',
value: 'server3'
},
{
certname: 'server1',
environment: 'acceptance',
name: 'operatingsystem',
value: 'windows'
},
{
certname: 'server2',
environment: 'acceptance',
name: 'operatingsystem',
value: 'windows'
},
{
certname: 'server3',
environment: 'acceptance',
name: 'operatingsystem',
value: 'RedHat'
},
{
certname: 'server1',
environment: 'acceptance',
name: 'operatingsystemmajrelease',
value: '2008 R2'
},
{
certname: 'server2',
environment: 'acceptance',
name: 'operatingsystemmajrelease',
value: '2008 R2'
},
{
certname: 'server3',
environment: 'acceptance',
name: 'operatingsystemmajrelease',
value: '6'
},
{
certname: 'server1',
environment: 'acceptance',
name: 'clientversion',
value: '5.5.2'
},
{
certname: 'server2',
environment: 'acceptance',
name: 'clientversion',
value: '5.5.2'
},
{
certname: 'server3',
environment: 'acceptance',
name: 'clientversion',
value: '5.5.2'
}];
const result = {};
data.forEach(val => {
if(result[val.certname]){
result[val.certname][val.name] = val.value;
}else{
result[val.certname] = {};
result[val.certname][val.name] = val.value;
}
})
JSON.stringify(Object.values(result))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.