简体   繁体   English

合并具有匹配值的Json

[英]Merge Json with matching values

I have a JSON file which has duplicate keys and i want to merge the duplicate key and their values to one record. 我有一个包含重复键的JSON文件,我想将重复键及其值合并到一条记录中。

Example: 例:

The Json looks like this: Json看起来像这样:

{
  "numbers": {
    "0BJA10GH001": {
      "links": [
        {
          "name": "RI-Fliessbild: RG MFB L3 RI_002",
          "path": "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf",
          "searchNumber": true
        },
        {
          "name": "Katalog Sensor: TGM / siehe 0BJA10GH001 -1_5.1",
          "path": "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf",
          "searchNumber": false
        },
        {
          "name": "Datenblatt: 0BJA10GH001",
          "path": "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BJA10GH001.pdf",
          "searchNumber": false
        }
      ],
      "aliases": [
        "0BJA10GH001"
      ]
    },


"0BJA10GH001": {
  "links": [
    {
      "name": "RI-Fliessbild: RG MFB L3 RI_002",
      "path": "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf",
      "searchNumber": true
    },
    {
      "name": "Komponentenbeschreibung: TGM / ---",
      "path": "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf",
      "searchNumber": false
    },
    {
      "name": "Datenblatt: 0BJA10GH001",
      "path": "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BJA10GH001.pdf",
      "searchNumber": false
    }
  ],
  "aliases": [
    "0BJA10GH001"
  ]
}

} } }}

I want it to look like that: 我希望它看起来像这样:

{
  "numbers": {
    "0BJA10GH001": {
      "links": [
        {
          "name": "RI-Fliessbild: RG MFB L3 RI_002",
          "path": "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf",
          "searchNumber": true
        },
        {
          "name": "Katalog Sensor: TGM / siehe 0BJA10GH001 -1_5.1",
          "path": "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf",
          "searchNumber": false
        },
        {
          "name": "Datenblatt: 0BJA10GH001",
          "path": "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BJA10GH001.pdf"
        },
        {
          "name": "Komponentenbeschreibung: TGM / ---",
          "path": "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf",
          "searchNumber": false
        },
        {
          "name": "Datenblatt: 0BJA10GH001",
          "path": "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BJA10GH001.pdf",
          "searchNumber": false
        }
      ],
      "aliases": [
        "0BJA10GH001"
      ]
    }
  }
}

The two keys "0BJA10GH001" which are the same merge and the duplicate values inside get removed. 相同合并的两个键“ 0BJA10GH001”被删除,其中的重复值被删除。

var SeatWithCat = [{"0BJA10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Katalog Sensor: TGM / siehe 0BJA10GH001 -1_5.1", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BJA10GH001", "path" : "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BJA10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BJA10GH001"] },
"0BJA10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: TGM / ---", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BJA10GH001", "path" : "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BJA10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BJA10GH001"] },
"0BMC10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Katalog Sensor: TGM / siehe 0BMC10GH001 -1_5.1", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BMC10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BMC10GH001", "path" : "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BMC10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BMC10GH001"] },
"0BMC10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: TGM / ---", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BMC10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BMC10GH001", "path" : "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BMC10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BMC10GH001"] },
"0CFB01BB020" : { "links" : [{ "name" : "RI-Fliessbild: 90034652", "path" : "/C1_RI-Fliessbilder/C1.1/1_2/90034652.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: Messer Gas / HCl in N2", "path" : "/1_Verfahrenstechnik/Teil B/1_B7/1_B7.5/01_0CFB01BB020.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0CFB01BB020", "path" : "/Datenblaetter Apparateliste/90034652/0CFB01BB020.pdf", "searchNumber" : false }], "aliases" : ["0CFB01BB020"] },
"0CFB01BB021" : { "links" : [{ "name" : "RI-Fliessbild: 90034652", "path" : "/C1_RI-Fliessbilder/C1.1/1_2/90034652.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: Messer Gas / NH3 in N2", "path" : "/1_Verfahrenstechnik/Teil B/1_B7/1_B7.5/01_0CFB01BB021.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0CFB01BB021", "path" : "/Datenblaetter Apparateliste/90034652/0CFB01BB021.pdf", "searchNumber" : false }], "aliases" : ["0CFB01BB021"] }}];

function combine(arr) {
  var combined = arr.reduce(function(result, item) {
    var current = result[item.key];


    result[item.key] = !current ? item : {
      kks: item.key,
    };

    return result;
  }, {});

  return Object.keys(combined).map(function(key) {
    return combined[key.key];
  });
}

var result = combine(SeatWithCat);

console.log(result);
document.write(JSON.stringify(result));

This is my Code so far and it works for the first part. 到目前为止,这是我的代码,适用于第一部分。 It removes the double keys "0BJA10GH001" but the values inside the array don't join from the duplicate key. 它删除了双键“ 0BJA10GH001”,但数组中的值未从重复键中加入。

Each key "0BJA10GH001" has an "links" array inside it and these "links" arrays should join each other when the duplicates get merged. 每个键“ 0BJA10GH001”内部都有一个“链接”数组,当重复项合并时,这些“链接”数组应相互连接。

All values inside the duplicate keys "0BJA10GH001" should join into one array. 重复键“ 0BJA10GH001”内的所有值都应合并为一个数组。 How can i achieve that? 我该如何实现? And one step further, how can i delete the duplicates inside an array? 再进一步,如何删除数组中的重复项?

Thanks a lot. 非常感谢。

Code Now: 现在的代码:

 var SeatWithCat = [{"0BJA10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Katalog Sensor: TGM / siehe 0BJA10GH001 -1_5.1", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BJA10GH001", "path" : "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BJA10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BJA10GH001"] }, "0BJA10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: TGM / ---", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BJA10GH001", "path" : "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BJA10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BJA10GH001"] }, "0BMC10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Katalog Sensor: TGM / siehe 0BMC10GH001 -1_5.1", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BMC10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BMC10GH001", "path" : "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BMC10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BMC10GH001"] }, "0BMC10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: TGM / ---", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BMC10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BMC10GH001", "path" : "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BMC10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BMC10GH001"] }, "0CFB01BB020" : { "links" : [{ "name" : "RI-Fliessbild: 90034652", "path" : "/C1_RI-Fliessbilder/C1.1/1_2/90034652.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: Messer Gas / HCl in N2", "path" : "/1_Verfahrenstechnik/Teil B/1_B7/1_B7.5/01_0CFB01BB020.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0CFB01BB020", "path" : "/Datenblaetter Apparateliste/90034652/0CFB01BB020.pdf", "searchNumber" : false }], "aliases" : ["0CFB01BB020"] }, "0CFB01BB021" : { "links" : [{ "name" : "RI-Fliessbild: 90034652", "path" : "/C1_RI-Fliessbilder/C1.1/1_2/90034652.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: Messer Gas / NH3 in N2", "path" : "/1_Verfahrenstechnik/Teil B/1_B7/1_B7.5/01_0CFB01BB021.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0CFB01BB021", "path" : "/Datenblaetter Apparateliste/90034652/0CFB01BB021.pdf", "searchNumber" : false }], "aliases" : ["0CFB01BB021"] }}]; function combine(arr) { var combined = arr.reduce(function(result, item) { var current = result[item.key]; result[item.key] = !current ? item : { kks: item.key, }; return result; }, {}); return Object.keys(combined).map(function(key) { return combined[key.key]; }); } var result = combine(SeatWithCat); console.log(result); 

Finding Duplicate Keys code: 查找重复密钥代码:

var data = yourJson.numbers;
var keys = Object.keys(data);
var sizeOfData = keys.length;
for (var i=0; i < sizeOfData-1; i++){
 for (var j=i; j< sizeOfData-1; j++){
        if(keys[i] == keys[j+1]){
             // here i and j+1 have same key and need another algo for merge
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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