JSON を CSV に変換

JSON を CSV にすると、オブジェクトの配列がそのまま Excel や Google スプレッドシートで開ける表になります。入れ子になったオブジェクトはドット区切りの列名に展開され、`{"user":{"name":"a"}}` は `user.name` という列になります。全部あなたのブラウザーの中で処理されるので、API のレスポンスや顧客データがどこかに送られることはありません。

  • 処理される場所 ブラウザーの中です。ファイルがアップロードされることはありません。
  • 作り直し CSVはJSONとは仕組みが違います。非可逆コーデックのような段階的な劣化ではありません。CSVが表現できるものは忠実に再現され、対応するものがないものはまったく残りません。
  • ファイルサイズの上限 1ファイルあたり100MBまで。無料、アカウント不要です。
  • 知っておきたいこと 入れ子のオブジェクトは平らにされて列になります。深く入れ子になったデータは形を失います。

一度に100ファイルまで。フォーマットが混ざっていても構いません。

そもそも JSON を CSV にする場面

JSON は API が返す形式で、CSV は人間が Excel や Google スプレッドシートで見る形式です。API のレスポンスをそのまま担当者に渡しても読めないので、この変換が挟まります。

ログの分析、注文データの棚卸し、外部サービスから取得した一覧を営業チームに渡すとき。どれもこの変換が実質的な起点です。

配列はそのまま行になる

一番素直な入力はオブジェクトの配列です。`[{"id":1,"name":"a"},{"id":2,"name":"b"}]` なら、キーが列の見出しになり、それぞれのオブジェクトが 1 行になります。これがほとんどの API レスポンスの形です。

配列の中の 1 つ目のオブジェクトが持つキーだけでなく、あとの行が持つキーも列として拾われます。3 行目にしか出てこないフィールドがあっても、その列は用意され、それ以外の行では空欄になります。

外側の 1 つのキーは自動的にほどかれる

`{"users":[{"id":1},{"id":2}]}` のように、配列を 1 つのキーで包んだ形は API レスポンスでよくある書き方です。この形は自動で認識され、包んでいる `users` というキーを気にせず、中の配列がそのまま表になります。

包んでいるキーが 2 つ以上あったり、値が配列でなかったりする場合は、この特別扱いは働きません。オブジェクトそのものが 1 行として書き出されます。

入れ子はドット区切りの列名に展開される

`{"user":{"name":"a","address":{"city":"東京"}}}` のように何段にも入れ子になった値は、葉にあたる値ごとに 1 つの列になり、そこまでの経路がドットでつながった名前になります。この例なら `user.name` と `user.address.city` の 2 列です。

配列も同じしくみで展開され、添字がドットの区切りに使われます。`{"tags":["a","b"]}` は `tags.0` と `tags.1` という 2 つの列になります。行によって配列の長さが違えば、列の数もその分だけ増減します。

数値と真偽値、そして精度の話

数値と真偽値はすでに JSON の側で型を持っているので、CSV に書き出すときに推測は入りません。`123` は `123` のまま、`true` は `true` のまま書かれます。読み込むときの型推定とは違う話です。

気をつけたいのは、非常に大きな整数です。JSON はテキストとして解析されるとき JavaScript の数値型を経由するため、2 の 53 乗を超える桁の ID は、変換前の時点ですでに末尾が丸まっていることがあります。SNS の投稿 ID のような長い数値の列は、値が正しいかどうか出力後に確認してください。

空の欄と欠けている欄

JSON の `null` は空欄として書かれます。行によってキー自体が存在しない場合も、その列は用意されたうえで空欄になります。CSV の側からは、この 2 つを区別する方法がありません。

その区別に意味があるデータなら、CSV に渡す前に「値がなかった」ことを示す固有の文字列を JSON の側に入れておくほかありません。表形式が持てる情報の量は、もとの JSON より少ないと考えておくのが安全です。

Excel で開くときに起きること

CSV そのものは単なるテキストで、数値も文字列として書かれます。ただし Excel は CSV を開くとき、数字に見える列を自動的に数値として解釈するので、長い ID の列が指数表記になったり、先頭の 0 が消えたりすることがあります。

これは Excel 側の表示の癖であって、この変換機が値を書き換えているわけではありません。IDや品番の列を守りたいときは、Excel の「データの取り込み」機能でその列を文字列として指定して開いてください。

プライバシーとまとめての変換

この変換は全部あなたのブラウザーの中で行われます。API のレスポンスや顧客データを含む JSON をどこかのサーバーにアップロードすることはありません。ネットワークタブを見れば、ファイルを運ぶ通信が一切ないことが確認できます。

1 度に 100 個までのファイルをまとめて置け、1 ファイルあたり 100 MB まで扱えます。終わったファイルから順に、まとめて 1 つの ZIP として受け取れます。

JSON を CSV に変換する手順

  1. お手元の JSON ファイル をこのページに落とすか、押してファイルを選んでください。
  2. 変換先に CSV を選びます。変換はブラウザーの中で行われ、ファイルはアップロードされません。
  3. できあがった CSV ファイル をダウンロードします。

JSON と CSV——何が変わるか

JSONとCSVの比較
JSONCSV
正式名称JavaScript Object NotationComma-Separated Values
拡張子.json.csv
メディアタイプapplication/jsontext/csv
最初の公開20011972
仕様RFC 8259RFC 4180
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるかすべてのブラウザ対応なし
代わりに検討される形式XML, YAML, NDJSONXLSX, Parquet

結果を開く

CSV を読めるブラウザーはありません。その点では、2 つのうち通用する場所が狭いのはこちらです。送る前に、受け取る側がこれを受け付けるかどうか確かめてください。

開くプログラムが重なりません。JSON はVisual Studio Code、jq、Postmanで、CSV はMicrosoft Excel、LibreOffice Calc、pandasで開きます。結果を渡す相手には後者のどれかが要ります。

どちらの形式が何のためのものか

JSON は 2001 年に登場しました。 RFC 8259 で規定されています。ファイルが、それを書いた道具より長く生きなければならないなら、この一点には値打ちがあります。

CSV は 1972 年から使われています。規定は RFC 4180 です。Microsoft Excel、LibreOffice Calc、pandasがこの形式を読めます。

CSV は 1972 年、JSON は 2001 年に登場しました。人に渡すならたいてい古いほうが安全で、新しいほうは同じ仕事をより少ないバイト数で片づけます。

JSON から CSV:よくある質問

JSON ファイル はどこかにアップロードされますか。

いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。

JSON から CSV への変換は無料ですか。

はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。

JSON を CSV に変換すると品質は落ちますか。

JSON と CSV は、内容の表し方が根本から違います。ですからこの変換は複製ではなく再構築です。誠実ではありますが、1 バイトも同じというわけではありません。 入れ子のオブジェクトは平らにされて列になります。深く入れ子になったデータは形を失います。

CSV ファイル はブラウザーで開けますか。

CSV を読めるブラウザーはありません。その点では、2 つのうち通用する場所が狭いのはこちらです。送る前に、受け取る側がこれを受け付けるかどうか確かめてください。

これらのフォーマットについて