2017-07-12 1 views
-1

重複するキーを持つJSONファイルがあり、重複するキーとその値を1つのレコードにマージしたい。一致する値を持つJsonをマージする

例:

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" 
    ] 
} 

} }私はそれが見えるようにしたい

{ 
    "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" 
     ] 
    } 
    } 
} 

2つのキー "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)); 

これはこれまでのコードであり、最初の部分で動作します。ダブルキー "0BJA10GH001"は削除されますが、配列内の値は重複キーから結合されません。

各キー「0BJA10GH001」の中に「リンク」配列があり、これらの「リンク」配列は、複製がマージされるときに互いに結合する必要があります。

重複キー "0BJA10GH001"内のすべての値は、1つの配列に結合する必要があります。どうすればそれを達成できますか? さらに進んで、配列内の複製をどのように削除できますか?

ありがとうございました。今

コード:

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);

+0

あなたの答え、特にコード・ブロックをフォーマットしてください。 – Arount

+0

javascriptオブジェクトにキーを重複させることはできません。あなたのオブジェクトは間違っています。 – Shubham

+0

重複を削除するには、それらを重複して削除します。 – silvankaufmann

答えて

0

ファインディング重複キーコード:

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 
     } 
    } 
} 
+0

ありがとう。私はこの仕事をするために全力を尽くしています。 – silvankaufmann

関連する問題