繁体   English   中英

将json数据与javascript合并

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM