CSVとJSON:同じデータを運ぶ2つの方法
表形式のデータのほとんどは、どちらか一方のフォーマットに行き着きます。CSVはスプレッドシートの母国語です。各行が1行で、カンマが列を区切るプレーンテキストファイルです。JSONはAPIとアプリの言語です。オブジェクト(キーと値のペア)と配列(順序付きリスト)で構成された構造化テキストフォーマットです。両者は非常に異なる形で同じ情報を表現します。だからこそ、この2つの間の変換が頻繁に必要とされます。このページはその変換を双方向で、すべてブラウザ内で行います。
CSVはグリッドが自然な場所で輝きます。データベースからレポートをエクスポートしたり、注文リストをダウンロードしたり、ExcelやGoogle Sheetsからシートを保存すると、ほぼ常にCSVが得られます。コンパクトで人間が読めて、地球上のすべての分析ツールが開けます。JSONはソフトウェアがソフトウェアに話しかける場所で輝きます。REST APIがそれを送受信し、設定ファイルがそれを使い、JavaScriptはパースライブラリなしで読み込めます。スプレッドシートのエクスポートをAPIに送り込んだり、APIレスポンスをスプレッドシートに戻したりする必要があるとき、実際にはこれら2つの世界の間を翻訳しているのです。

行とヘッダーがオブジェクトになる仕組み
マッピングは見た目より単純です。CSVファイルの最初の行は通常ヘッダー行で、これらのヘッダー名がJSONのキーになります。続く各行が1つのオブジェクトになり、各セルが対応するヘッダーとペアになります。ファイル全体がそれらのオブジェクトの配列になります。name,email,ageという列を持つCSVは、[{"name": "Ada", "email": "ada@example.com", "age": "36"}, ...]のようなリストになります。逆方向、JSONからCSVへは、最初のオブジェクトのキーを読んでヘッダー行を作り、次にオブジェクトごとに1行ずつ書き出します。データが本当に表形式であれば、これはクリーンで予測可能なラウンドトリップです。
知っておくべき落とし穴
CSVは単純に見えますが、いくつかの鋭いエッジを隠しています。最大の問題はフィールド内のカンマです。住所に「Berlin, Germany」が含まれている場合、カンマで単純に分割するとその1つの値が2列に分断されます。CSV規格はこのようなフィールドをダブルクォートで囲むことで対処し、引用されたフィールド内のクォートは二重化されます("")。優れたコンバーターはこれらのルールを尊重するため、データが列をサイレントにずらすことはありません。区切り文字にも注意してください。多くのヨーロッパのエクスポートではカンマが小数点区切りのためにすでに使われているため、セミコロンを代わりに使います。タブやパイプも見かけます。
より深い違いは型です。CSVにはデータ型の概念がまったくありません。すべてテキストなので、数値の42・ブール値のtrue・空のセルはすべてプレーンな文字列に見えます。JSONはそれとは対照的に、数値・文字列・ブール値・null・ネストされた構造を区別します。CSVをJSONに変換する際、ツールに数値とブール値を解釈するよう指示しない限り、値は文字列として届きます。JSONをCSVに変換するときは逆の問題があります。ネストされたオブジェクトと配列はフラットなグリッドにきれいに収まらないため、通常は1つのセルにフラット化またはstringify化されます。これを事前に知っておけば、後でなぜ列が「おかしく見える」のか悩まなくて済みます。

実際のラウンドトリップ
頻繁に発生するシナリオを紹介します。同僚が新しいユーザーのスプレッドシートを送ってきて、内部APIを通じてロードするよう依頼します。APIはJSONしか受け付けません。シートをCSVにエクスポートし、ここに貼り付けると、リクエストペイロードにそのまま入れられるクリーンなオブジェクトの配列が返ってきます。その後、APIが作成したレコードのJSONリストを返してきて、同じ同僚が確認のためにそれを必要としています。JSONを貼り付けてCSVに変換すると、そのままスプレッドシートで開けます。スクリプトも、インストールも不要で、通常のワークフローの中にある2回のクイックな翻訳です。
設計上、ローカルのみで処理
これはすべてブラウザで実行されます。CSVとJSONはご自身のマシンのJavaScriptで解析・変換され、サーバーにアップロードされることはありません。エクスポートには実際の名前・メール・注文の詳細・内部識別子が含まれていることが多く、ランダムなリモートサービスに貼り付けるべきでない情報が含まれているため、これは重要です。ここではデータがページを離れることはありません。結果を整形したい場合は、JSONフォーマッターがプリントと検証を行います。関連フォーマットのその他のデータコンバーターもご覧ください。
よくある質問
データはどこかにアップロードされますか?
いいえ。変換はすべてブラウザのJavaScriptを使ってブラウザ内で実行されます。CSVとJSONはご自身のデバイス上に留まり、サーバーに送信されることはありません。
コンバーターはフィールド内のカンマを処理しますか?
はい。カンマを含むフィールドはCSVでダブルクォートで囲まれるべきで、パーサーはそれらのクォートを尊重し、値が1つの列に留まるようにします。
JSONで数値がテキストとして表示されるのはなぜですか?
CSVにはデータ型がないため、すべてのセルはプレーンテキストです。ソースファイルが数値と単語を区別する方法を提供しないため、数値とブール値の解析が適用されない限り、値はJSON文字列になります。
CSVに変換するとネストされたJSONはどうなりますか?
フラットなグリッドはネストされた構造を保持できないため、ネストされたオブジェクトと配列は通常、1つのセル内でフラット化またはstringify化された単一の値として書き込まれます。
カンマの代わりにセミコロンやタブを使えますか?
はい。特にヨーロッパのエクスポートでは、区切り文字としてセミコロンやタブが使われることが多く、ツールは標準的なカンマの代わりにそれらを読み取ることができます。
双方向で変換できますか?
はい。CSVをJSONに、またはJSONをCSVに変換でき、スプレッドシートとAPIの間のラウンドトリップを簡単に行えます。
