バージョン情報
$ node -v v16.15.1
起こったこと
特定のディレクトリ内にある複数のJSONファイルをを1つにしたいという要望が出た。
JSONファイルの名前をKeyにして、中身をvalueとしてを持つような単純なものである。
例
hogehoge.json
{ "name": "aiueo" }
piyopiyo.json
{ "weight": 60 }
まとめた後のjson
{ "hogehoge": { "name": "aiueo" }, "piyopiyo": { "weight": 60 } }
つくったもの
大した理由ではないがTypeScriptではなくNode.jsで書くことにした。
// merge_json.js const path = require("path"); const fs = require("fs"); const printUsage = () => { console.log("Usage: node merge_json.js <path_to_jsons_dir>"); process.exit(1); }; if (process.argv.length < 3) { printUsage(); } const dir = process.argv[2]; const target = path.resolve(process.cwd(), dir); const mergedJson = {}; const removeExtension = (filename) => { return filename.replace(/\.json/, ""); }; fs.readdirSync(target).forEach(fileName => { if (!/\.json$/.test(fileName)) return; const json = fs.readFileSync(path.resolve(target, fileName), { encoding: "utf-8" }); const key = removeExtension(fileName); mergedJson[key] = JSON.parse(json); }); fs.writeFileSync(process.cwd() + "/merged.json", JSON.stringify(mergedJson, null, 2), { encoding: "utf-8" });
ターミナルからnode merge_json DIR_PATH
と入力すればマージされたJSONがmerged.json
という名前で出力される。