2016-08-24 3 views
2

状況は次のとおりです。2,089個のJSONファイルを1つのJSONファイルにマージしようとしています。それらはすべて「貸し手」と呼ばれるディレクトリにあります。gulp-merge-json:入力ファイルを無視しますか?

私はいくつかのPythonスクリプトを試しましたが、gulp-merge-jsonという名前のgulpモジュールを使いたいと思います。

私はgulpタスクを実行します。読み込み時間は、本当にすべての2,000以上のファイルを処理していることを示しています。結果ファイルには1つのファイルからのJSONデータしか含まれていません。まだOdderは(おそらく解決策のヒント)、使用されているファイルのタイトルは999.jsonです。これらのファイルの名前はすべてx.jsonで、1 < x < 2,090です。

このエラーの原因となるデータで目立つものはありません。ファイル999は他の方法では例外的ではないようですが、明らかに最高のタイトル値を持っています。

十分です。ここにコードがあります:

gulp.src('/Users/me/Documents/lenders/*.json') 
.pipe(merge('combined.json')) 
.pipe(gulp.dest('/Users/me/Documents/LendersData')); 

glupfileにこれをすべて適切にインストールされた依存関係で置き、実行します。簡単に言えば、このプロセスは(おそらく)、lsonersディレクトリ内のすべてのファイルをjsonで指定されたglobを使用して取り出し、LendersDataという名前のディレクトリを作成し、combined.jsonファイルをその内部に配置します。

このgulpモジュールを使用したことがある人はいますか?私は入力データの量(ギガバイトの範囲のどこか)で判断すると、タスクを実行するのに時間がかかり、999.jsonのデータだけが残っているのはなぜか分かりません。ありがとうございました!

EDIT: 3つのJSONファイルを使用したテストは機能しませんでした。出力ファイルに書き込まれた1.json、2.json、および3.jsonからの唯一のファイルは3.jsonでした。これは、スクリプトによって最後に読み込まれたファイルだけがコピーされるという指標です。完全な試みのための999.jsonの場合、それは特定の方法でソートされている場合、リストされた最後のファイルになる可能性があります。私のglobはディレクトリ内のすべてのファイルを処理するつもりだと思った?

ここではの例です。をマージするとどういう意味ですか? 1.jsonと2.jsonという2つのファイルがあるとします。

1.json:

{ 
    "header":{ 
     "total":2,"page":1,"date":"2016-08-01T17:29:57Z","page_size":1}, 
    "lenders": [ 
     {"lender_id":"matt","name":"Matt"} 
    ] 
} 

そして2.json:

{ 
    "header":{ 
     "total":2,"page":2,"date":"2016-08-01T17:30:57Z","page_size":1}, 
    "lenders": [ 
     {"lender_id":"sarah","name":"Sarah"} 
    ] 
} 

マージ結果:

{ 
    "lenders": [ 
     {"lender_id":"matt","name":"Matt"}, 
     {"lender_id:"sarah","name":"Sarah"} 
    ] 
} 

(Iヘッダをポップ実現することは、追加の要件であるが、そうしないとJSONが無効になります)

+0

私はちょうどそれをテストし、それは私のために(または少なくとも私がそれを期待した)うまく動作します。私はあなたがどんなアウトプットを望んでいるのか分かりませんが「マージ」とまったく同じ意味ですか?そのgulpプラグインは、一致するキーを上書きします。たとえば、 '{"値 ":1}"を含む2つのJSONファイルがある場合、それらのファイルをマージした出力は '{" value ":" 2} '(2番目のキーは共通キー' value'を置き換えるので)。したがって、すべてのJSON入力ファイルが同じキーを正確に持つ場合は、最後のファイルと同じだけの出力を期待する必要があります。 – MadScone

+0

'' 1json'と '2json'の例と期待される出力を掲示できれば、あなたがしようとしていることがより明確になるはずです。 – MadScone

+0

ありがとうMadScone、それは多く説明します。したがって、最後に読み込まれたファイルは999.jsonであり、出力データに最後のファイルがあります。 私がマージしたことは、すべての1.jsonと2.jsonを単一の有効なJSONファイルとして保持するファイルを作成することです。 余計なヘッダーをポップするなど、さらに編集する必要があることがわかりました。しかし、私が2,089個のjsonファイルをマージすると、個々のデータをすべて1つのソースにまとめたいと思っています。私は、この単一のファイル(SQLファイルにする)にもっと注意を払っています。 お返事ありがとうございます! – Typhon

答えて

0

あなたの最新のアップデートに基づいて編集されました。これはそれを行う必要があります:

var gulp = require('gulp'); 
var combine = require('gulp-jsoncombine'); 

function combineFiles (files) { 

    var lenders = []; 
    for (var file in files) { 
     if (files.hasOwnProperty(file) && files[file].hasOwnProperty('lenders')) { 
     lenders.push(files[file].lenders); 
     } 
    } 

    var result = {lenders: [].concat.apply([], lenders)}; 
    return new Buffer(JSON.stringify(result)); 
} 

gulp.task('default', function() { 

    return gulp.src('lenders/*.json') 
     .pipe(combine('combined.json', combineFiles)) 
     .pipe(gulp.dest('LendersData')); 

}); 
関連する問題