小ネタです。 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
インストール
適当なプロジェクト用のディレクトリを準備します。
$ 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