Skip to content

Instantly share code, notes, and snippets.

@yukikim
Created November 14, 2024 07:29
Show Gist options
  • Save yukikim/df39728c503791be801b2a308057104b to your computer and use it in GitHub Desktop.
Save yukikim/df39728c503791be801b2a308057104b to your computer and use it in GitHub Desktop.
Node jsonToCsv

TypeScript と Node.js を使って JSON データを CSV に変換する方法について解説します。

以下では、json2csv ライブラリを使って簡単に JSON を CSV に変換する方法を紹介します。

1. json2csv ライブラリのインストール

json2csv は、Node.js の環境で JSON を CSV に変換するための人気のライブラリです。

npm install json2csv

2. JSON を CSV に変換するコード例

2.1 シンプルな変換

以下のコードは、JSON データを CSV に変換して、結果をコンソールに表示するものです。

import { parse } from 'json2csv';

const jsonData = [
  { name: 'Alice', age: 25, city: 'New York' },
  { name: 'Bob', age: 30, city: 'Los Angeles' },
  { name: 'Charlie', age: 35, city: 'Chicago' }
];

try {
  const csv = parse(jsonData);
  console.log(csv); // CSVデータをコンソールに出力
} catch (err) {
  console.error('CSV変換エラー:', err);
}

このコードは、jsonData を CSV 形式に変換し、コンソールに出力します。

2.2 CSV をファイルに保存

もし変換した CSV をファイルに保存したい場合、Node.js の fs モジュールを使って保存できます。

import { parse } from 'json2csv';
import * as fs from 'fs';

const jsonData = [
  { name: 'Alice', age: 25, city: 'New York' },
  { name: 'Bob', age: 30, city: 'Los Angeles' },
  { name: 'Charlie', age: 35, city: 'Chicago' }
];

try {
  const csv = parse(jsonData);
  
  // CSVをファイルに書き込む
  fs.writeFileSync('output.csv', csv, 'utf8');
  console.log('CSVデータが output.csv に保存されました');
} catch (err) {
  console.error('CSV変換エラー:', err);
}

このコードは、jsonData を CSV に変換し、それを output.csv というファイルに保存します。

3. オプション設定

json2csv には、さまざまなオプションがあります。例えば、カラムの順序を指定したり、特定のフィールドを除外したりすることができます。

3.1 カラムの順序を指定する

const jsonData = [
  { name: 'Alice', age: 25, city: 'New York' },
  { name: 'Bob', age: 30, city: 'Los Angeles' },
  { name: 'Charlie', age: 35, city: 'Chicago' }
];

const csv = parse(jsonData, { fields: ['name', 'city', 'age'] }); // カラム順序を指定
console.log(csv);

このコードでは、CSV に出力するフィールドの順序を指定しています。

3.2 特定のフィールドを除外する

const jsonData = [
  { name: 'Alice', age: 25, city: 'New York' },
  { name: 'Bob', age: 30, city: 'Los Angeles' },
  { name: 'Charlie', age: 35, city: 'Chicago' }
];

const csv = parse(jsonData, { fields: ['name', 'city'] }); // 'age' フィールドを除外
console.log(csv);

このコードでは、namecity のみを出力し、age フィールドを除外しています。

4. 大きな JSON データを CSV に変換する

もし JSON データが非常に大きい場合、メモリ使用量を抑えるためにストリームを使うことを検討できます。json2csv はストリーミングモードもサポートしています。

import { Transform } from 'stream';
import { parse } from 'json2csv';
import * as fs from 'fs';

const jsonData = [
  { name: 'Alice', age: 25, city: 'New York' },
  { name: 'Bob', age: 30, city: 'Los Angeles' },
  { name: 'Charlie', age: 35, city: 'Chicago' }
];

const transform = new Transform({
  objectMode: true,
  transform(chunk, encoding, callback) {
    this.push(JSON.stringify(chunk) + '\n');
    callback();
  }
});

const output = fs.createWriteStream('output.csv');
output.write('name,age,city\n');  // ヘッダー行

transform.pipe(parse()).pipe(output);

jsonData.forEach((item) => {
  transform.write(item);
});
transform.end();

このコードは、大量の JSON データを逐次的に処理し、メモリに大量のデータを保持せずに CSV に変換する方法です。


結論

json2csv を使用することで、TypeScript と Node.js で JSON を簡単に CSV に変換できます。特にファイルに保存する場合やカスタマイズが必要な場合も、オプションを活用することで柔軟に対応できます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment