CSVのクォーテーションフィールドとエスケープの処理
CSVのクォーティングルールをマスター:ダブルクォートされたフィールド、エスケープされた引用符、複数行の値、混合クォーティング。堅牢なCSV解析に必須。
Formatting
詳細な説明
CSVのクォーティングとエスケープルール
クォートされたフィールドの適切な処理が、単純なCSVパーサーと堅牢なパーサーを分けます。RFC 4180はほとんどのツールが従うクォーティングルールを定義しています。
クォーティングが必要な場合
フィールドは以下を含む場合、ダブルクォートで囲む必要があります:
- デリミタ文字(通常はカンマ)
- ダブルクォート文字
- 改行(CR、LF、またはCRLF)
例
name,description,price
"Smith, John","He said ""hello""",29.99
"Smith, John"— カンマを含むのでクォートされています。パーサーは内部のカンマで分割してはいけません。"He said ""hello"""— ダブルクォートを含み、二重化によってエスケープされています。解析後の値はHe said "hello"です。
よくある解析ミス
- すべてのカンマで分割する。 単純な
line.split(",")はクォートされたフィールドにカンマが含まれている場合に壊れます。 - 二重クォートを処理しない。 クォートされたフィールド内の
""は、フィールドの終わりではなくリテラルの"を表します。 - 複数行フィールドを無視する。 クォートされたフィールドは複数行にまたがることがあります。
正しくクォートされたCSVの生成
JSONからCSV出力を生成する際は、これらのルールを適用します:
function escapeField(value, delimiter = ",") {
const str = String(value);
if (str.includes(delimiter) || str.includes('"') || str.includes("\n")) {
return '"' + str.replace(/"/g, '""') + '"';
}
return str;
}
ユースケース
サプライヤーからの商品カタログCSVエクスポートを解析する場合に使用します。商品説明にカンマ、引用符、HTMLマークアップが含まれており、JSON変換時に正しく保持する必要があります。