本文へスキップ

CSV JSON 変換ツール

CSVをJSONのオブジェクト配列に、JSONをCSVに変換します。区切り文字の自動判定、ネストしたJSONの展開、Excelの文字化けを防ぐBOMに対応。ファイルはサーバーに送信されません。

0文字 · 0行

オフにすると配列の配列になります。
007のように先頭に余分な0が付いた値は文字列のままにします。

0文字 · 0行

ファイルはこの端末の中だけで処理され、サーバーには送信されません。 仕組みを見る

列a、bと値1、2を持つCSV表と同じデータのJSON配列を相互変換

使い方

上のタブで変換の向き(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を自動で取り除いて読み込みます。

参考資料

よくある質問

ヘッダーに同じ名前が2回あったり、空欄があったりすると、JSONのキーはどうなりますか?

列を捨てず、重複名には_2・_3を、空の見出しにはcolumnと列番号を付けます。id,name,name, の下に1,Kim,Lee,xがあれば、キーはid・name・name_2・column4です。新しい名前は警告で確認できます。見出しより多い列も同じ規則です。別のキーが必要なら1行目を直して再変換してください。

ファイルを読み込むと「UTF-8のファイルではありません」というエラーが出ます。

ファイルの中にUTF-8として読めないバイトが1つでもあると、ファイル全体を受け付けません。文字化けしたまま変換されるのを防ぐためで、入力欄はそれまでの内容のままです。Excelで「CSV(コンマ区切り)」形式で保存したファイルは、日本語版WindowsではShift_JIS、韓国語版WindowsではEUC-KR(CP949)で保存されることが多く、このエラーになります。Excelの「名前を付けて保存」で「CSV UTF-8(コンマ区切り)」を選んで保存し直してから読み込んでください。チェックするのはファイルだけなので、文字が正しく表示されるソフトで内容をコピーして入力欄に貼り付ける方法もあります。

CSVの途中に空行があるとどうなりますか?

初期設定でオンの「空行をスキップ」は、完全に空の行だけを除きます。オフにすると空行もレコードになり、見出しがa,bなら値が2つとも空文字列の行となって列数の警告が出ます。区切り文字だけの行(,)や空白だけの行はオンでも残ります。引用符内の空行は値の一部で、末尾の改行1つは新しい行を作りません。

JSON → CSVで「表に変換できないJSONです」というエラーが出ます。どこを直せばいいですか?

最上位の値がオブジェクトでも配列でもない場合(数値や文字列が1つだけなど)と、配列の最初の要素がオブジェクトでも配列でもない場合に出るエラーです。[1,2,3]や["a","b"]のように値だけを並べた配列がこれに当たります。値ごとに1行にしたい場合は、[[1],[2],[3]]のように要素を配列で囲むか、[{"v":1},{"v":2},{"v":3}]のようにオブジェクトにしてヘッダーvを付けてください。最初の要素はオブジェクトか配列なのに、あとの要素に種類の違うものが混ざっていると、代わりに「[1]番目の要素の種類が最初の要素と異なります」というエラーになります。番号は0から数えるので[1]は2つ目の要素で、[{"a":1},null]のようにオブジェクトの間にnullが入っていてもこのエラーになります。空の配列[]はエラーにならず、結果が空になります。

ファイルサイズの上限はありますか?もっと大きいファイルはどうすればいいですか?

どちらの向きも上限は10MBです。それより大きいファイルは読み込まずに拒否し、貼り付けたテキストも10MBを超えると「入力が大きすぎます」というエラーだけが表示され、一部だけを変換することはありません。サイズは文字数ではなくUTF-8のバイト数で数えます。半角の英数字は1バイト、éやñのようなアクセント付き文字は2バイト、日本語・韓国語の文字は3バイトです。大きなCSVは複数のファイルに分けて1つずつ変換してください。「1行目をヘッダーにする」がオンなら、分けたファイルそれぞれの先頭にヘッダー行を入れます。大きなJSONは、配列をいくつかの小さな配列に分けてください。

使用しているオープンソース: papaparse (MIT)

最終更新日: