2014-06-26 4 views
10

Ich bin ein wenig in Zug, und ich bin auf der Suche nach der richtigen Kombination von Aufgaben kombinieren und bearbeiten n Menge ähnlich formatierten json Dateien, ziehen Sie eine bestimmte Anordnung von jedem zu lesen , kombinieren Sie sie und speichern Sie sie als neue Datei. Ich habe erfolgreich gulp-concat verwendet, um Dateien zu kombinieren, und gulp-json-editor, um die Werte für eine Datei zu ändern, aber es fällt mir schwer, mich darum zu kümmern, wie man die Prozesse aneinander reiht.schluck Verwendung auf mehr json-Dateien in eine

n Anzahl der JSON-Dateien wie folgt formatiert:

{ 
    "id": "groupofthings1", 
    "things": [ 
     { ... }, 
     { ... }, 
    ], 
    ... 
} 

Wunsch einzelne Dateiausgabe alle "Dinge" enthält:

[ 
    { ... }, 
    { ... }, 
    { ... }, 
    { ... }, 
    ... 
] 
+0

Erstellen Sie ein Array mit jedem Eintrag eine der Dateien als String darstellt, dann das Ergebnis mit etwas verschmelzen wie '‚{‘+ json_array.join (‚‘) +‚}‘' Oder könnten Sie Einfach alle JSON-Dateien laden/analysieren, die Objekte zusammenführen und das resultierende Objekt als JSON zurückschreiben. – joemaller

+0

@joemaller - Aber wie mache ich das mit Schluckplugins? Ich bin zuversichtlich, dass ich die Datenstruktur aufbauen kann, wenn ich mit den richtigen Plugins die richtigen Streams an den richtigen Stellen bekomme. – pleeschultz

Antwort

8

mich Nahm ein bisschen suchen, aber am Ende der Suche nach jsoncombine

Es lädt alle JSON-Dateien und führt sie über eine benutzerdefinierte Funktion als Hash von JSON-Objekten. Jedes Json-Objekt wird unter seinem ursprünglichen Dateinamen gespeichert.

gulp.src("./groups/of/things/**/things.json") 
.pipe(jsoncombine("all-things.json",function(data){ 
    // do any work on data here 
    return new Buffer(JSON.stringify(data)); 
})) 
.pipe(gulp.dest("./dest")); 
+0

wies mich in die richtige Richtung, danke. – Flinkman

+0

aber wenn ich nur 2 Dateien innerhalb eines Verzeichnisses zusammenführen möchte? zum Beispiel habe ich Ordner, um alle Konfigurationsdateien zu halten, eine der Basis-Datei und andere sind env-basierte Dateien, manchmal möchte ich Dev + Basis zusammenführen, manchmal prod + Basis und so weiter. jede Chance, es mit diesem Paket zu tun? –

+0

@ShlomiSasson können Sie ein Array von bestimmten Dateinamen/Mustern übergeben. ZB 'gulp.src (['./file1.json', './base.json'])' – JaredMcAteer