使い方
上のタブで変換の向き(CSV → JSONまたはJSON → CSV)を選び、入力欄に貼り付けるか、.csv・.tsv・.txt・.jsonファイルをドロップしてください。ファイルをドロップすると、拡張子に合わせて変換の向きが自動で切り替わります。結果は入力と同時に表示され、コピーボタンやダウンロードボタンで取り出せます。結果の下には最初の10行(列は30列まで)を表で表示するので、列が正しく分かれているかをひと目で確認できます。
CSV → JSONでは、1行目をヘッダー(キー)として使うかどうかを選べます。オンにすると[{"name":"Kim","age":30}]のようなオブジェクトの配列に、オフにすると[["name","age"],["Kim",30]]のような配列の配列になります。インデントは半角スペース2つ・4つ・タブ・1行から選べます。
CSV → JSONを初めて実行するときに変換ライブラリpapaparseを読み込みます。JSON → CSVに追加の変換ライブラリは不要です。
CSVの書式ルール(RFC 4180)
CSVにはさまざまな方言がありますが、最も広く参照される基準は2005年に公開されたRFC 4180です。主なルールは次のとおりです。
- 1行が1レコードで、フィールドはカンマで区切ります。1行目はヘッダーの場合もそうでない場合もあります。
- フィールドにカンマ・ダブルクォート・改行が含まれる場合は、そのフィールド全体をダブルクォートで囲みます。例:
"Seoul, Korea" - フィールド内のダブルクォートは2つ続けて書きます。例:
"say ""hi"""はsay "hi"です。 - 空白もフィールドの一部です。前後の空白は自動では削除しません。
このツールはJSON → CSVでこのルールどおりにフィールドを囲み(前後に空白があるフィールドも囲みます)、行末にはRFC 4180が定めるCRLFを使います。CSV → JSONでダブルクォートが閉じられていない場合("abcで終わる)や、閉じるダブルクォートのあとに文字が続く場合("x"y)は、結果の代わりにおおよその行番号を表示します。ヘッダーと列数が異なる行は変換したうえで、行番号とともに警告します。
カンマ以外の区切り文字
「CSV」という名前でも、カンマ以外の区切り文字を使うファイルは少なくありません。ExcelはCSVを保存するときWindowsの地域設定にあるリスト区切り文字に従い、ドイツ・フランス・スペインのように小数点にカンマを使う地域では、1,5のような数値と重ならないようセミコロン(;)を使います。データベースや表計算ソフトからコピーした表はタブ区切り(TSV)であることが多く、ログファイルでは縦線(|)も使われます。
区切り文字を「自動判定」にすると、先頭の20レコード(入力の先頭64KBまで)でカンマ・セミコロン・タブ・縦線がダブルクォートの外に何回出てくるかを数え、行ごとの個数が最もそろっているものを選びます。判定結果は選択欄の下に表示されます。違っていれば手動で選んでください。
数値・true/falseの変換ルール
CSVのフィールドはすべて文字列です。「数値・true/falseを変換」をオンにすると、JSONで扱いやすいよう2種類だけを変換します。true・false(大文字・小文字を問わない)は真偽値に、JSONの数値の書き方に合う値は数値にします。それ以外はすべて文字列のままです。+1、.5、前後に空白が付いた値、nullやyesと書かれたセルがその例です。区切り文字がカンマ以外のファイルでは、1,5も文字列のままです。区切り文字がカンマのファイルでは、ダブルクォートで囲んでいない1,5は1と5の2つのセルに分かれ、それぞれ数値になります。-5も数値になります。1E5のように指数表記として読める値も数値(100000)になるため、そのようなコードがある場合はこのオプションをオフにしてください。
あえて変換しない値もあります。先頭に余分な0が付いた値(郵便番号01234、コード007)は数値にすると先頭の0が消えるため、文字列のままにします。0.5のように0が1つだけで始まる小数は数値にします。JavaScriptの数値で正確に表せない値、つまり9007199254740991(2^53 − 1)より大きい整数と、有効数字が15桁を超える小数も、値が知らないうちに変わらないよう文字列のままにします。空のフィールドはnullではなく空文字列(“”)になります。
ネストしたJSONをCSVに展開するルール
CSVは平らな表なので、ネストしたJSONをそのままでは入れられません。このツールは次のルールで展開します。
- ネストしたオブジェクトはドット記法のキーになります:
{"address":{"city":"Seoul"}}→ 列address.city - 配列は展開せず、JSONの文字列のまま1つのセルに入れます:
["a","b"] - nullは空のセル、空のオブジェクトは
{}になります。 - 列は、すべてのオブジェクトのキーを最初に出てきた順に集めたものです。あるオブジェクトにないキーは空のセルになります。
入力はオブジェクトの配列が基本です。オブジェクト1つは1行の表に、配列の配列は内側の配列をそれぞれそのまま1行にします。元のキーにドットが含まれている場合("a.b")は、同じオブジェクトの中で展開したキーと名前が重なることがあります。重なった場合は、そのオブジェクトであとに書かれた値だけが残ります。{"a":{"b":1},"a.b":2}ではa.bのセルは2になり、2つのキーの順番を逆に書くと1になります。
最上位の配列の要素1つは、中身が何であっても必ず1行になります。[{"id":1,"items":[{"sku":"A"},{"sku":"B"}]}]はヘッダーid,itemsの下の1行だけになるので、itemsの要素ごとに1行にしたい場合は、内側の配列[{"sku":"A"},{"sku":"B"}]だけを入力してください。こうして作ったCSVをCSV → JSONに戻しても、元の構造には戻りません。itemsは配列ではなくそのテキストが入った文字列になり、address.cityのような列もネストしたオブジェクトではなく"address.city"という1つのキーのままです。
Excelで日本語・韓国語が文字化けするとき(BOM)
UTF-8で保存したCSVをExcelでダブルクリックして開くと、日本語・韓国語やアクセント付き文字が読めない文字になることがあります。Excelはファイルの先頭にBOM(Byte Order Mark、UTF-8ではバイト列 EF BB BF)があればUTF-8として読み込みますが、なければパソコンの既定の文字コードで読むためです。JSON → CSVの「Excel用にUTF-8 BOMを付ける」は、ダウンロードボタンで保存するファイル(data.csv、区切り文字が「タブ」ならdata.tsv)の先頭にBOMを付けてこの問題を防ぎます。このオプションは最初からオンになっています。コピーボタンで取り出すテキストにはBOMは付きません。BOMが付くのはダウンロードするファイルだけなので、結果欄に表示されるテキストにはオプションがオンでもBOMはありません。BOMなしで保存されたファイルがすでに手元にある場合は、変換し直す必要はありません。ダブルクリックで開く代わりに、Excelの[データ]→[テキストまたはCSVから]で取り込んでください。
まれにBOMを最初のヘッダーの一部として読んでしまうプログラムもあるため、Excel以外で使うファイルならオフにしておくと安全です。逆にCSV → JSONでは、ファイルや入力の先頭にあるBOMを自動で取り除いて読み込みます。
