Node.jsでCSVファイル操作

Node.jsでCSVファイルを読み書き

CSVファイルとJSON(Object)間の変換はnode-csvを使用することで簡単に行えます。

前提

Node.jsがインストールされていること。

モジュールの準備

次のコマンドでnode-csvを準備します。
npm install csv

CSVからJSON(Object)への変換

CSV(ヘッダ行無)の変換

次の通りcsv-parserへファイルを入力することで、JSONに変換できます。
入力ファイルはこちら

CSV(ヘッダ行有)の変換

CSVファイルにヘッダ行がある場合、次のように{columns : true}とすることで、ヘッダ行をJSONのキーとして使用できます。
入力ファイル(ヘッダ付)はこちら

const filename = 'sample2.csv';
const parser = csv.parse({columns : true});

読込結果(先頭のひとつ)は次のとおり。

{ '列1': '1101',
  '列2': '60',
  '列3': '600000',
  '列4': 'ホツカイドウ',
  '列5': 'サツポロシチユウオウク',
  '列6': 'イカニケイサイガナイバアイ',
  '列7': '北海道',
  '列8': '札幌市中央区',
  '列9': '以下に掲載がない場合',
  '列10': '0',
  '列11': '0',
  '列12': '0',
  '列13': '0',
  '列14': '0',
  '列15': '0' }

CSV(ヘッダ行有)を対応するキーを指定して変換

ヘッダ行が存在する場合、次のように{columns : ヘッダ行の解析関数}とすることで、対応するJSONのキーを次のように変換することもできます。
入力ファイル(ヘッダ付)はこちら

読込結果(先頭のひとつ)は次のとおり。

{ jis: '1101',
  postNumOld: '60',
  postNum: '600000',
  prefKana: 'ホツカイドウ',
  countryKana: 'サツポロシチユウオウク',
  townKana: 'イカニケイサイガナイバアイ',
  pref: '北海道',
  country: '札幌市中央区',
  town: '以下に掲載がない場合',
  etc1: '0',
  etc2: '0',
  etc3: '0',
  etc4: '0',
  etc5: '0',
  etc6: '0' }

CSV(utf-8以外)の変換

文字コード変換が必要ならIconvをpipeで繋げると簡単です。
入力ファイル(ヘッダ付、sjis)はこちら

const Iconv = require('iconv').Iconv;
const iconv = new Iconv('sjis', 'utf-8//TRANSLIT//IGNORE');
readableStream.pipe(iconv).pipe(parser);

JSON(Object)からCSVへの変換

次の通りcsv-stringifyへ入力することで、CSVに変換できます。

CSV変換時のヘッダ付与はキーとヘッダの対応関係を用意してstringifyに指定するだけです。

まとめ

以上のとおり、Node.jsではnode-csvを使用すると簡単にCSVとJSON間で変換できます。

謝辞

入力ファイルの元データは郵便番号データを使用させていただきました。
郵便番号データダウンロード

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

three × 5 =