2017-07-12 8 views
-1

Ich habe eine JSON-Datei, die doppelte Schlüssel hat und ich möchte den doppelten Schlüssel und ihre Werte zu einem Datensatz zusammenführen.Merge Json mit passenden Werten

Beispiel:

Die Json sieht wie folgt aus:

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

} }

ich es so aussehen wollen:

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

Die beiden Schlüssel "0BJA10GH001", die identisch sind, und die doppelten Werte werden entfernt.

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

Dies ist mein Code so weit und es funktioniert für den ersten Teil. Es entfernt die doppelten Schlüssel "0BJA10GH001", aber die Werte innerhalb des Arrays verbinden sich nicht vom doppelten Schlüssel.

Jeder Schlüssel "0BJA10GH001" hat ein "Links" -Array darin und diese "Links" -Arrays sollten sich miteinander verbinden, wenn die Duplikate zusammengeführt werden.

Alle Werte innerhalb der doppelten Schlüssel "0BJA10GH001" sollten in einem Array zusammengeführt werden. Wie kann ich das erreichen? Und einen Schritt weiter, wie kann ich die Duplikate in einem Array löschen?

Vielen Dank. Jetzt

Code:

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

Bitte formatieren Sie Ihre Antwort, vor allem Codeblöcke. – Arount

+0

Sie können keine doppelten Schlüssel im JavaScript-Objekt haben. Dein Objekt ist falsch. – Shubham

+0

Ich möchte die Duplikate entfernen, indem Sie sie mit ihren Gegenstücken zusammenführen. – silvankaufmann

Antwort

0

Finding Nachschlüssel 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 
     } 
    } 
} 
+0

vielen Dank. Ich versuche mein Bestes, damit das funktioniert. – silvankaufmann