CSV⇔JSON変換

CSVをJSONに、JSONをCSVに変換します。セルの中のカンマや改行、Shift_JISのファイルもそのまま読み込めて、結果はExcelで文字化けしないBOM付きUTF-8で保存できます。変換はすべてブラウザの中だけで行い、データはどこにも送りません。

このツールでできること

表計算ソフトや業務システムから書き出したCSVをJSONに変えてプログラムやAPIのテストに使う、APIのレスポンス(JSON)をCSVにしてExcelで集計する、といった変換をブラウザだけで行います。顧客名簿や売上データのように外部のサイトへ貼り付けにくいものでも、データは端末の外に出ません。

セルの中のカンマや改行を1つのセルとして扱い、区切り文字も自動で判定します。JSON→CSVでは、入れ子を address.city のような列に展開し、{"items": […]} のように内側にある配列も見つけて取り出します。

使い方

  1. 上のボタンで変換の向きを選びます。ファイルを開いたときは、拡張子から自動で切り替わります。
  2. 左の欄に貼り付けるか、ファイルを開くかドロップします。入力したそばから右の欄に結果が出ます。
  3. 下の「表で確認」で、列がずれていないかを見ます。列の数が合わない行には色が付き、上に行番号が出ます。
  4. 必要に応じて区切り文字や出力の形を変えます。文字化けしたときは「読み込む文字コード」を切り替えます。
  5. 「結果をコピー」か「ファイルに保存」で取り出します。CSVをExcelで開くなら、保存の文字コードはBOM付きUTF-8のままにします。

知っておくと便利なこと

ExcelのCSVが文字化けする理由:日本語版のExcelは、印のないCSVをダブルクリックで開くとShift_JISとして読みます。UTF-8のファイルの先頭に EF BB BF の3バイト(BOM)があると、ExcelはUTF-8だと判断して正しく開きます。古い基幹システムにはBOMを読み違えるものやShift_JISしか受け付けないものもあるので、渡す先に合わせて選んでください。

Shift_JISにない文字:絵文字や一部の漢字(「𠮷」など)は保存すると「?」に置き換わるので、該当した文字を警告に表示します。

郵便番号と電話番号は「列ごと」に型を決める:0600001 と 1000001 が同じ列にあるとき、セルごとに判定すると文字列と数値が混ざります。このツールは列全体を見て、1つでも数値にできない値があれば、その列はすべて文字列にします。16桁以上の整数(注文番号やIDなど)も、JavaScriptの数値では下の桁が丸められるので文字列のまま残します。1.10 のような小数は末尾の0も書かれたとおりに出力します。

CSVの決まりごと:標準的な形はRFC 4180にまとめられています。カンマ・改行・ダブルクォートを含むセルは全体を " で囲み、セルの中の " は "" と2つ重ねます。

Excelで開くと値が変わることがある:Excelは開いた時点で 0123 を 123 に、12桁以上の数字を 1.23E+11 のような指数表示に、1-2 を日付に変えてしまいます。「先頭の0と長い数字をExcelでも保つ」を選ぶと、該当するセルを ="0123" という数式の形で出力します。ただしこの形はExcel向けなので、ほかのシステムに読み込ませるCSVでは使わないでください。

CSVインジェクション:=・+・-・@ で始まるセルは、Excelが数式として扱うことがあります。外部から集めたデータ(問い合わせフォームの内容など)を配布するCSVにする場合は、「数式として実行されないようにする」で先頭に ' を付けると安全です。普通の数値(-5 など)には付けません。

よくある質問

データはサーバーに送られますか?
送られません。ファイルの読み込みも変換もブラウザの中だけで行います。ブラウザに保存するのは区切り文字などの設定だけで、入力した内容は保存しません。
大きなファイルも変換できますか?
端末のメモリの範囲で処理できます。1MBを超える場合は画面には先頭だけを表示しますが、変換とコピー・保存は全体に対して行います。数百MBのファイルは、ブラウザが止まることがあります。
JSONの変換でエラーになります。
エラーの行と列を表示します。末尾のカンマやシングルクォートなど、JSONとして正しくない書き方が原因のことが多いので、JSON整形・検証で詳しく確認できます。1行に1件ずつ並ぶJSON Linesは、そのまま読み込めます。
行によって列の数が違うCSVはどうなりますか?
エラーにはせず変換し、足りない行は空のセルとして扱い、多い行は col6 のような名前の列に入れます。該当する行の番号は警告に表示します。