[Node.js] JSONをCSV形式でファイルに書き込む – csv-writer

  • このエントリーをはてなブックマークに追加
  • LINEで送る

小ネタです。
csv-writerモジュールを使うとJSON的なデータをCSV形式でかんたんに保存することができます。

// CSVにしたいデータ(オブジェクト)
const data = [
  {id:1, title:"吾輩は猫である", view:123},
  {id:2, title:"坊っちゃん",     view:456},
  {id:3, title:"こころ",        view:789}
];

// 準備
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
  path: '/var/tmp/data.csv',       // 保存する先のパス(すでにファイルがある場合は上書き保存)
  header: ['id', 'title', 'view']  // 出力する項目(ここにない項目はスキップされる)
});

// 書き込み
csvWriter.writeRecords(data)
  .then(() => {
    console.log('done');
  });

次のようなファイルが生成されます。

$ cat /var/tmp/data.csv
1,吾輩は猫である,123
2,坊っちゃん,456
3,こころ,789
- Sponsored Link -

インストール

適当なプロジェクト用のディレクトリを準備します。

$ mkdir foo && cd foo
$ npm init

したらば今回利用するモジュールをインストールします。

$ npm install csv-writer

その他の使い方

ヘッダー行を出力する

出力する項目を設定する際に、以下のようにヘッダー内容を指定します。

const csvWriter = createCsvWriter({
  path: '/var/tmp/data.csv',
  header: [
    {id:'id',    title:'ID'},
    {id:'title', title:'タイトル'},
    {id:'view',  title:'閲覧数'}
  ]
});

実行するとヘッダー付きで出力されます。

$ cat /var/tmp/data.csv
ID,タイトル,閲覧数
1,吾輩は猫である,123
2,坊っちゃん,456
3,こころ,789

区切り文字を変更する

fieldDelimiterで区切りに使いたい文字を指定します。

const csvWriter = createCsvWriter({
  path: '/var/tmp/data.csv',
  header: ['id', 'title', 'view'],
  fieldDelimiter: ";"
});

以下のようにセミコロンで区切られたファイルが出力されます。

$ cat /var/tmp/data.csv
1;吾輩は猫である;123
2;坊っちゃん;456
3;こころ;789

……が、残念ながらこのオプションはカンマかセミコロンしか指定できません。それ以外の文字を指定すると例外が発生し終了します。

改行を「\n」から「\r\n」にする

デフォルトの\nから\r\nに変更できます。

const csvWriter = createCsvWriter({
  path: '/var/tmp/data.csv',
  header: ['id', 'title', 'view'],
  recordDelimiter: "\r\n"
});

こちらもそれ以外の文字には変更できないのでご注意を。

常に引用符で囲う

alwaysQuoteにtrueを指定するとすべての項目がダブルコーテーションで囲われます。デフォルトはfalseです。

const csvWriter = createCsvWriter({
  path: '/var/tmp/data.csv',
  header: ['id', 'title', 'view'],
  alwaysQuote: true
});

以下のような結果になります。

$ cat /var/tmp/data.csv
"1","吾輩は猫である","123"
"2","坊っちゃん","456"
"3","こころ","789"

既存ファイルに追加書き込みする

通常は上書き保存されますが、appendにtrueを指定するとデータが末尾に追加されます。

const csvWriter = createCsvWriter({
  path: '/var/tmp/data.csv',
  header: ['id', 'title', 'view'],
  append: true
});

次のように2回実行すると追加書き込みされているのがわかりますね。

$ node putcsv.js
$ node putcsv.js

$ cat /var/tmp/data.csv
1,吾輩は猫である,123
2,坊っちゃん,456
3,こころ,789
1,吾輩は猫である,123
2,坊っちゃん,456
3,こころ,789

参考ページ

- Sponsored Link -

同じカテゴリの記事

Donate

投げ銭お待ちしております!

BTC3A9nH1j7qQdKrSTrmnEdweo6zPqpHBmkxC
ETH0x1aE0541198D1F9f2908a25C35032A473e74D3731
XPXaQ9zv65F9ovfoMBrFGiPRG47aSHFhy8SX
MONAMTKgzSiS5BDueZkRCHySih24TGFwHThaDQ (MonaCoin)
ZNYZhnpf4RFYVQTAQiyoJg9dGoeC4bgT3BoSy (BitZeny)

ご質問やリクエストなどお気軽に。メールアドレスの入力は任意です。書き込みが反映されるまで時間がかかります。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください