ExcelやGoogleスプレッドシート用にJSONをCSVに変換する方法
JSONとCSVが異なる仕事のために作られた理由
JSONとCSVは、全く異なる世界のために作られています。JSON(JavaScript Object Notation)は、構造化された階層的なデータを表現します。ネストされたオブジェクトや配列の配列、混合データ型を簡単に扱えるため、APIやアプリケーションの設定ファイルの標準となっています。一方、CSV(Comma-Separated Values)はその逆で、単純なフラットなテーブルです。すべての行が同じ数の列を持つ必要があり、ネストはできません。この根本的な違いは、.jsonファイルを.csvに名前変更するだけでは機能しないことを意味します。 CRMから500件の顧客レコードのリストのようなデータをREST APIから取得すると、ほとんどの場合JSON形式で得られます。1つの顧客レコードは次のようになっているかもしれません: {"id": 1042, "name": "Sara Okonkwo", "email": "sara@example.com", "orders": [{"id": 88, "total": 49.99}]} ExcelやGoogleスプレッドシートは、このファイルをきれいなテーブルとして解析できません。フラットな行が必要です。JSONをCSVに変換することは、アナリスト、マーケター、運用チームがAPIデータを日々使用するスプレッドシートツールに取り込むための橋渡しとなります。JSONが単純なオブジェクトのリストであれば変換は簡単ですが、ネストが関わってくるとはるかに難しくなり、ほとんどの人がここでつまずきます。
ネストされたJSONは変換時にどうなるか
ここはほとんどのチュートリアルが飛ばしてしまう部分で、本当に頭が痛い問題です。JSONにネストされたオブジェクトや配列が含まれている場合、CocoConvertを含むどんな変換ツールも、それをどうフラット化(平坦化)するかを決定しなければなりません。これにはいくつかの方法があります。 一つの戦略は、ドット記法を使ってネストされたキーをフラット化することです。`address.city`のようなフィールドが列ヘッダーになり、その値がセルに直接入ります。これは単純な1レベルのネストには最適な解決策です。別のアプローチは、ネストされた値を「文字列化」することです。この方法では、オブジェクトや配列全体がJSON文字列として1つのセルに詰め込まれます。これにより全てのデータは保持されますが、スプレッドシートで追加の作業なしにはほぼ読めません。 3つ目の、そしてしばしば最も有用な戦略は、配列を複数の行に展開することです。もしある顧客に3つの注文があれば、コンバーターはその顧客のために3つの別々の行を作成し、各注文に対して親フィールドを複製します。これによりデータはスプレッドシートですぐに使えるようになりますが、ファイルが巨大になる可能性もあります。 CocoConvertは、ネストされたオブジェクトにはドット記法でのフラット化を、ネストされた配列には文字列化をデフォルトで行います。したがって、JSONに{"shipping": {"method": "express", "days": 2}}のような2レベルのオブジェクトがあれば、`shipping.method`と`shipping.days`という列ができます。しかし、配列がある場合は、その配列全体が1つのセルの文字列になります。3レベル以上の深いネストやオブジェクトの配列があるデータの場合、きれいなCSVを得るためには、ほぼ間違いなくスクリプトでJSONを前処理する必要があります。どんなオンラインコンバーターも、あらゆるネストパターンを魔法のように処理することはできません。何千ものレコードを投入する前に、絶対に少量のサンプルでテストすべきです。
CocoConvertでJSONをCSVに変換する
単純なJSON、つまりフラットなオブジェクトの配列や単純な1レベルのネストの場合、CocoConvertを使えばセットアップ不要で迅速に処理できます。手順は簡単です。 まず、/convert/json-to-csvにアクセスします。アップロードボックスと出力オプションが表示されます。.jsonファイルをアップロードしてください。CocoConvertの無料プランでは、最大50MBのファイルを扱えます。ファイルがそれより大きい場合は、分割する必要があります。`json.dump(data[:5000], open('chunk1.json','w'))`のようなPythonのワンライナーがこれに最適です。 次に、区切り文字を選択します。カンマが標準ですが、Excelがセミコロンを期待する地域(ドイツやフランスの皆さん、あなたのことですよ)にいる場合は、ダウンロードする前にこれを切り替える必要があります。この小さな設定で多くの人がつまずきます。 「ヘッダー行を含める」オプションは常にオンにしておきましょう。スプレッドシートは列名のために最初の行を必要とします。その後、「変換」をクリックするだけです。10,000行のファイルなら、通常10秒もかかりません。そして、出来立ての新しい.csvファイルをダウンロードできます。 プロのヒントです:JSONのキーに「first name」や「unit$price」のようなスペースや特殊文字が含まれている場合、それらはそのまま列ヘッダーになります。Excelはこれを処理できますが、構造化参照の代わりに列文字を使わなければならないため、数式を書くのが面倒になります。変換する前にJSONのキー名を変更するか、インポート直後にExcelで列名を修正する方がずっとクリーンです。これにより、後々の頭痛の種を減らせます。
ExcelでCSVを正しく開く方法
CSVをダウンロードするのは仕事の半分にすぎません。Excelでどう開くかが、きれいなテーブルになるか、1つの列にごちゃごちゃになっただけの役に立たないデータになるかの分かれ目です。 何があっても、ファイルをダブルクリックするだけはやめてください。唯一信頼できる方法は、インポートウィザードを使うことです。Excel 365とExcel 2019では、「データ」→「データの取得」→「テキストまたはCSVから」にあります。ファイルを選択すると、Excelがプレビューを表示します。ここで区切り文字を確認するチャンスです。もし変換時に選択したものと一致しない場合、すべてのデータがA列に詰め込まれてしまいます。CSVのインポートで苦労したことがある人なら、この痛みをよく知っているはずです。 日付の形式に注意してください。JSONがISO 8601形式の文字列(例:`2025-11-03T14:22:00Z`)を使用している場合、Excelはしばしばそれを単なるテキストとしてインポートします。これは修正できます。列を選択し、「データ」→「区切り位置」に進み、「区切り記号付き」を選択し、次へを2回クリックし、列のデータ形式を「日付(YMD)」に設定します。これにより、テキストが適切に並べ替えやフィルタリングができる実際の日付値に変換されます。 20万行のような大きなファイルの場合、Excelはインポートできますが、動作は非常に遅くなります。ピボットテーブルやVLOOKUPは痛々しいほど遅くなるでしょう。代わりにPower Query(「データ」→「データの取得と変換」→「CSVから」)を使用してください。Excelを使い物にならなくすることなく、大規模なデータセットをはるかにうまく処理できます。 そして、Excelの厳格な制限である1,048,576行に注意してください。JSONから生成されたCSVがそれ以上の行数を持つ場合、Excelは制限を超えたすべてのデータを警告なしに切り捨てます。この数に近づいている場合は、変換を開始する前にソースファイルを分割してください。
GoogleスプレッドシートにCSVをインポートする
Googleスプレッドシートは、一般的にExcelよりもCSVのインポートが得意ですが、いくつかの設定が重要です。手順は簡単です:シートを開き、「ファイル」→「インポート」に進み、CSVをアップロードします。表示されるダイアログで、いくつかの選択肢があります。「インポート場所」は常に新しいシートに設定して、既存のデータを上書きしないようにしましょう。「区切り文字の種類」は「カンマ」(またはセミコロンの場合は「カスタム」)に設定します。 これが最も重要な設定です:「テキストを数値、日付、数式に変換する」。データに数値のように見える商品コード(例:`00847`)がある場合、先頭のゼロを保持するためにこのボックスのチェックを外さなければなりません。そうしないと、Googleスプレッドシートは親切にもデータを「修正」して、数値の847に変えてしまいます。 自動変換をオンにしておくと、スプレッドシートはISO形式の日付をネイティブ形式にうまく解析します。また、数値文字列を数値に変換しますが、これは通常問題ありませんが、特別な識別子にとっては問題になることがあります。 毎週月曜日に新しいJSONエクスポートを取得するなど、この作業を頻繁に行う場合は、手動で行わないでください。Googleスプレッドシートの`IMPORTDATA`関数やGoogle Apps Scriptの使用を検討しましょう。`IMPORTDATA`は公開URLに限定されているため、プライベートデータには使えない選択肢です。Apps Scriptははるかに強力で、保護されたJSONエンドポイントからデータを取得し、CSVのステップを完全にスキップしてシートに直接書き込むことができます。しかし、一度きりの作業や、開発者がいないチームにとっては、/convert/json-to-csvにあるCocoConvertのファイルを使った手動インポートが、仕事を終わらせる最速の方法です。2分で完了し、コードは一切不要です。 Googleスプレッドシートにも独自の制限があります:ファイルあたり100MB、スプレッドシートあたり1000万セルです。50,000行×20列のCSVは100万セルにすぎないので、作業する余地は十分にあります。
よくある変換エラーへの対処法
JSONをCSVに変換する際には、いくつかの一般的な問題に遭遇するでしょう。以下に注意すべき点を示します。 オブジェクト間でキーが一致しない。JSONは柔軟です。配列内のあるオブジェクトには`phone`フィールドがあるのに、次のオブジェクトにはない、ということがあります。CocoConvertのようなコンバーターは、データセット全体で見つかったすべてのユニークなキーに対して列を作成することでこれを処理します。レコードにキーがない場合、セルは単に空になります。これは正しいやり方ですが、注意してください:30種類の少しずつ異なるオブジェクト構造を持つ乱雑なソースファイルは、ほとんどが空の80列のCSVになる可能性があります。変換する前にJSONスキーマを整理しましょう。 ユニコードと特殊文字。JSONファイルはほとんどの場合UTF-8です。データに非ラテン文字(アラビア語、中国語、アクセント付き文字など)が含まれている場合は、Excelにそれを期待するように伝える必要があります。「データ」→「データの取得」→「テキストまたはCSVから」でインポートする際、プレビューダイアログの「元のファイル」設定を探し、`65001: Unicode (UTF-8)`に変更してください。これを忘れると、特殊文字がすべて文字化けしてしまいます。 非常に大きな数値。これは微妙ですが破壊的な問題です。JSONは巨大な数値を完全な精度で扱うことができますが、スプレッドシートはできません。ExcelとGoogleスプレッドシートはどちらも64ビット浮動小数点演算を使用しているため、9,007,199,254,740,992(または2^53)を超えると大きな整数を丸め始めます。JSONに9007199254740993のようなそれより大きな数値が含まれている場合、インポート時に警告なく丸められてしまいます。データベースからの大きな整数IDを扱っている場合、唯一の安全策は、変換する*前*にJSON内でそれらを文字列として保存することです。 空の配列とnull値。JSONの`null`値は、CSVでは正しく空のセルになります。空の配列`[]`は、ツールによって扱いが異なります。CocoConvertはこれを空の文字列に変換しますが、これはスプレッドシートにとって最良の選択であり、混乱を避けることができます。
コンバーターが適切なツールではない場合
オンラインコンバーターは、一度きりの作業や簡単な確認、特にJSONがすでにフラットな場合に最適です。しかし、すべての仕事に適したツールというわけではありません。 変換が自動化パイプラインの一部である場合、例えば夜間のETLジョブ、CI/CDでのデータ処理、あるいはあなたが介在せずに実行する必要があるものなど、スクリプトによる解決策を使用しなければなりません。オンラインツールは、自動化には信頼性が十分ではありません。Pythonのpandasライブラリがここでの業界標準です。`pd.read_json()`でJSONを読み込み、`pd.json_normalize()`でフラット化し、`.to_csv()`でCSVに書き出すことが、わずか数行でできます。コマンドラインの達人なら、Unix環境では`jq`が非常に強力な代替手段です:`jq -r '(.[0] | keys_unsorted) as $keys | $keys, (.[] | [.[$keys[]]] | @csv)' input.json > output.csv` でフラットな配列の変換が完了します。 JSONが深くネストされている場合(3レベル以上の深さ、またはオブジェクトの配列を含む場合)、どんなオンラインコンバーターを使っても、そのままではきれいなCSVは得られないでしょう。問題は構造的なものであり、適切にフラット化するためには、特定のスキーマを理解するカスタムスクリプトを書く必要があります。 もう一つ知っておくべきフォーマットはJSON Lines(.jsonl)で、各行が独立したJSONオブジェクトになっています。CocoConvertはこれらのファイルを完璧に処理するので、そのままアップロードできます。ただし、ファイルに通常のJSONとJSON Linesが混在していないことを確認してください。混在している場合は、先にクリーンアップする必要があります。 それ以外の用途、例えばSaaSプラットフォームからのJSONエクスポート、スプレッドシートで使いたいAPIレスポンス、テーブルとして確認したい設定ファイルなどでは、迷わず/convert/json-to-csvに向かいましょう。ファイルをアップロードすれば、1分もかからずにきれいなCSVが手に入ります。