コンテンツにスキップ

parser

Since v8.0.75

parserモジュールは、CSVとNDJSONデータ用のストリーミングデコーダーを提供します。 JSHストリームとともに使用するために設計されており、解析したオブジェクトをイベントで渡します。

一般的な使用方法は以下のとおりです。

const parser = require('parser');

エクスポートされるメンバー

  • csv(options)
  • ndjson(options)
  • CSVParser
  • NDJSONParser

csv()

CSVパーサーストリームを作成します。

構文
parser.csv([options])
オプション
オプション既定値説明
separatorString,フィールド区切り文字
quoteString"引用符
escapeStringquoteと同じエスケープ文字
headerstrue / false / String[]trueヘッダーの処理方式
skipLinesNumber0先頭でスキップする行数
skipCommentsBoolean | Stringfalseコメント行をスキップ。文字列を指定すると、その文字列をコメントの接頭辞に使用
strictBooleanfalse列数が異なる場合は失敗
mapHeadersFunctionヘッダー名の変換関数
mapValuesFunction行を出力する前に値を変換
trimLeadingSpaceBooleantrue各フィールドの先頭の空白を除去
戻り値

CSVParserインスタンスを返します。

CSVParser

モジュールがエクスポートするCSVパーサークラスです。

作成
new parser.CSVParser([options])

コンストラクターは、parser.csv()と同じオプションを受け取ります。

イベント
  • headers: ヘッダー行の解析後に1回発生
  • data: 解析した行オブジェクトごとに発生
  • error: strictモードでの解析失敗時に発生
  • end: 上流のストリームが終了すると発生
プロパティ
  • bytesWritten: 受信した入力のバイト数
  • bytesRead: パーサーが消費したバイト数
行の構造
  • headersを省略するかtrueにすると、最初の有効な行をヘッダーとして使用します。
  • headersfalseの場合、フィールド名は"0""1""2"のようになります。
  • headersが配列の場合、その名前を使用し、最初の行をデータとして扱います。
  • non-strictモードでは、追加の列は_3のような_Nフィールドで出力します。

ndjson()

NDJSONパーサーストリームを作成します。

構文
parser.ndjson([options])
オプション
オプション既定値説明
strictBooleantrue不正なJSON行で失敗するか、スキップするかを指定
戻り値

NDJSONParserインスタンスを返します。

NDJSONParser

モジュールがエクスポートするNDJSONパーサークラスです。

作成
new parser.NDJSONParser([options])

コンストラクターは、parser.ndjson()と同じオプションを受け取ります。

イベント
  • data: 解析したJSONオブジェクトごとに発生
  • warning: strict: falseで不正な行をスキップした場合に発生
  • error: strictモードでの解析失敗時に発生
  • end: 上流のストリームが終了すると発生

warningイベントのオブジェクトには、以下のフィールドがあります。

プロパティ説明
lineNumberスキップしたレコードの行番号
dataString前後の空白を除去した元の行のテキスト
errorString解析エラーメッセージ
プロパティ
  • bytesWritten: 受信した入力のバイト数
  • bytesRead: パーサーが消費したバイト数

CSV 例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
const fs = require('fs');
const parser = require('parser');

fs.createReadStream('/work/sample.csv')
    .pipe(parser.csv({
        headers: true,
        mapValues: ({ header, value }) => header === 'age' ? parseInt(value, 10) : value,
    }))
    .on('headers', (headers) => {
        console.println(headers.join(','));
    })
    .on('data', (row) => {
        console.println(row.name, row.age);
    });

NDJSON 例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const fs = require('fs');
const parser = require('parser');

fs.createReadStream('/work/sample.ndjson')
    .pipe(parser.ndjson({ strict: false }))
    .on('data', (obj) => {
        console.println(obj.id);
    })
    .on('warning', (warn) => {
        console.println('Skipped line:', warn.line);
    });

進捗表示の例

両パーサーストリームはbytesWrittenbytesReadを提供するため、ストリーミング中の進捗を追跡できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const fs = require('fs');
const parser = require('parser');

const decoder = parser.csv();

fs.createReadStream('/work/sample.csv', { highWaterMark: 8 })
    .pipe(decoder)
    .on('data', () => {
        console.println(decoder.bytesWritten, decoder.bytesRead);
    });

動作に関する注意

  • 両パーサークラスは、JSHのstream.Transform実装を継承します。
  • 解析した行とオブジェクトは、dataイベントで渡されます。
  • 両パーサーとも空行を無視します。
  • NDJSONParserは、各行を解析する前にtrim()を適用します。
  • CSVParserは、\r\n形式の入力を処理するため、行末の\rを除去します。
最終更新日