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