csvtojsonというモジュールを使えばできるのだが、使い方について調べると古い情報が多かったり複雑なことをしていたりと、CSVをJSONに変換するというただそれだけのことの情報が見つからないので、備忘として残しておく。
やり方
CSVファイルを読み込んでJSONの配列にするモジュールなので、あとはそれを好きに修正してファイル出力すれば良い。
環境
version | |
---|---|
Node.js | 20.9.0 |
npm | 10.0.0 |
csvtojson | 2.0.10 |
コード(使用例)
// モジュール読み込み
const fs = require('fs');
const csv = require('csvtojson');
/* CSVをJSONに変換する関数 */
const csv2json = async (inputCsvPath, outputJsonPath) => {
// CSVを配列として読み込み
const jsonArray = await csv().fromFile(inputCsvPath);
// ここで配列を加工してもOK
// console.log(jsonArray);
// 配列をJSONに変換
const jsonIndent = 2;
const jsonStr = JSON.stringify(jsonArray, undefined, jsonIndent);
// ファイルに出力
fs.writeFileSync(outputJsonPath, jsonStr);
}
/* メイン処理 */
// パス定義
const targetCsvPath = './target.csv';
const targetJsonPath = './output.json';
// 実行
csv2json(targetCsvPath, targetJsonPath);
実行例
上記のコードを実行するとこんな感じ
元となるCSV
1行目はヘッダー
target.csv
company,model
Apple,iPhone
BlackBerry,BlackBerry
Google,Pixel
kyocera,TORQUE
Samsung,Galaxy
SHARP,AQUOS
SONY,Xperia
Xiaomi,Redmi
出力JSON
CSVのヘッダーがJSONのkeyになる。
output.json
[
{
"company": "Apple",
"model": "iPhone"
},
{
"company": "BlackBerry",
"model": "BlackBerry"
},
{
"company": "Google",
"model": "Pixel"
},
{
"company": "kyocera",
"model": "TORQUE"
},
{
"company": "Samsung",
"model": "Galaxy"
},
{
"company": "SHARP",
"model": "AQUOS"
},
{
"company": "SONY",
"model": "Xperia"
},
{
"company": "Xiaomi",
"model": "Redmi"
}
]
おわりに
これからこのモジュールを使い始める方で同じ悩みを持っている方にこの記事が届きますように。