CSV と JSON の変換
CSV を JSON の配列に、JSON を CSV に変換します。区切り文字を自動判別し、セミコロンと小数点カンマの Excel ファイルも読めます。
コード例
自分のプロジェクトにコピーして使えます。どの例も言語の標準ライブラリだけを使うので、インストールするものはありません。
const text = 'name,city\nAnn,Utrecht\nBob,"Den Haag, NL"\n'
const trimmed = text.trimEnd()
const records = [[]]
for (const match of trimmed.matchAll(/("(?:[^"]|"")*"|[^,\n]*)(,|\n|$)/gu)) {
if (match.index === trimmed.length) break
const [, field, end] = match
records.at(-1).push(field.startsWith('"') ? field.slice(1, -1).replaceAll('""', '"') : field)
if (end === '\n') records.push([])
}
const [header, ...rows] = records
const objects = rows.map((row) => Object.fromEntries(header.map((name, i) => [name, row[i]])))
console.log(JSON.stringify(objects))できること
CSV を JSON の配列に、JSON を CSV に変換します。CSV は RFC 4180 に従って読み取り、引用符で囲んだ項目、重ねた引用符、項目内の改行に対応します。
使い方
- CSV または JSON を貼り付けるか、ファイルをドロップします。
- CSV → JSON か JSON → CSV を選びます。区切り文字と小数点は 自動判別 のままでも、自分で指定しても構いません。
- 結果をコピーまたはダウンロードするか、出力を入力として使う で次の入力にします。
例
CSV name;price / cheese;12,50 は [{"name": "cheese", "price": 12.5}] になり、見出し行 をオフにすると [["name", "price"], ["cheese", 12.5]] になります。
知っておくと便利なこと
- 見出し行がオンのとき、各行は列名をキーにしたオブジェクトになります。項目数が異なる行は行番号つきで知らせます。
- 区切り文字は最初の数行から判別します(カンマ・セミコロン・タブ・パイプ)。セミコロンと小数点カンマの Excel は、自動判別 で 12.5 として読まれます。
- 読み戻して同じになる値だけが数値になるため、
007、1.50、桁の多い数は文字列のままです。数値の読み取りをオフにすると、すべて文字列のままになります。 - JSON → CSV にはオブジェクトの配列(列はキーの和集合)または配列の配列が必要です。入れ子の値は JSON 文字列として書き出します。
CSV はどう読み取られますか?
RFC 4180 に従います。項目は区切り文字で分け、二重引用符で囲んだ項目には区切り文字や改行を含められ、中の引用符は 2 つ重ねます。区切り文字は最初の数行から判別します。
よくある質問
数値が文字列になる、またはその逆になるのはなぜ?
読み戻して同じになる値だけが数値になります。007、1.50、桁の多い数は文字列のままです。「数値と true/false を読む」をオフにすると、すべて文字列のままになります。
セミコロン区切りの Excel とは?
地域設定によっては、Excel は項目をセミコロンで区切り、小数点にカンマを使います。区切り文字や小数点が「自動判別」なら 12,50 は 12.5 として読まれ、小数点カンマを選ぶと JSON → CSV はセミコロン区切りで書き出します。
データはどこかに送信されますか?
いいえ。変換はブラウザ内で行われ、貼り付けた内容がサーバーに送信されることはありません。