ネストされたJSONをCSVに変換するには、CSVの行にするJSON配列を選べるオンラインJSON to CSV変換ツールを使います。この選択は、想像以上に重要です。実際のJSONエクスポートは、メタデータやページネーション、ラッパーオブジェクトから始まり、必要なレコードはresults、data.items、payload.recordsといったパスの配下にあることが少なくありません。

私は通常、JSONからCSVへの変換を次の3つの判断に分けて考えます。

  • どの配列を行にするか?
  • ネストされたオブジェクトのどのフィールドを列にするか?
  • 配列を連結するか、JSONのまま保持するか、個別の行に展開するか?

この3点が決まれば、あとは一般的なCSVワークフローです。出力をプレビューし、列を確認して、スプレッドシート、CRM、BIツール、データクレンジングのワークフローで使えるCSVファイルをダウンロードします。

📌 要点だけ知りたい方へ

まず、CSVの1行に何を表すかを決めます。今回の例では1行につき1社を出力したいため、行ノードは$.resultsです。その後、企業の指標をフラット化し、contactsやtagsなどの配列をどのように扱うか決めます。

このガイドでは、results配下に20,000件の企業レコードを持つネストされたJSONエクスポートを使用します。同じ手順は、APIレスポンス、スクレイピング結果、Webhookログ、CRMエクスポート、JSONのルート以外に有用なレコードがあるマーケットプレイスデータにも使えます。

クイックリンク:

ネストされたJSONファイルの例

例として、APIやスクレイピングツールから取得した大きなJSONエクスポートを想定します。ファイルサイズは約8.8MBで、トップレベルのresults配列に20,000件のレコードが含まれています。

ルートオブジェクトは次のような構造です。

{
  "meta": {
    "generatedAt": "2026-07-04T10:00:00Z",
    "source": "stress_test"
  },
  "results": [
    {
      "id": 0,
      "name": "NbDXeG4Gyg",
      "website": "https://example-0.com",
      "contacts": [
        {
          "name": "Ava Martin",
          "emails": ["ava@example-0.com"],
          "phones": ["+1 555 0100"]
        },
        {
          "name": "Noah Lee",
          "emails": ["noah@example-0.com"],
          "phones": []
        }
      ],
      "tags": "enterprise",
      "metrics": {
        "employees": 124,
        "revenue": {
          "amount": 476171,
          "currency": "USD"
        }
      },
      "createdAt": "2026-06-25T09:12:00Z"
    },
    {
      "id": 1,
      "name": "DwwGmkzmBi",
      "website": "https://example-1.com",
      "contacts": [
        {
          "name": "Mia Chen",
          "emails": ["mia@example-1.com"],
          "phones": ["+1 555 0101"]
        }
      ],
      "tags": ["saas", "mid-market"],
      "metrics": {
        "employees": 47,
        "revenue": null
      },
      "createdAt": "2026-06-26T14:33:00Z"
    }
  ]
}

このようなファイルは、単純な変換ツールが苦手とするケースです。レコードはルートオブジェクトではなく、resultsの中にあります。さらに、ネストされたオブジェクトや配列、文字列と配列が混在する値、null値、日付も含まれています。

🔍 このファイルが検証に適している理由

フラットなJSON配列では、簡単なケースしか検証できません。このファイルには、ラッパーのメタデータ、ネストされたレコード配列、オブジェクトフィールド、配列フィールド、型が混在する値、null値など、実際のエクスポートで重要になる要素が含まれています。

先頭の数行は、次のような構造です。

行Websiteの形式Contacts数Tagsの形式Revenue
0文字列2文字列金額と通貨
1文字列2配列Null
2配列1配列Null

出力するCSVは、1行につき1社とします。id、name、website、employees、amount、currency、createdAtなど、実用的なフィールドを列にします。contactsやtagsのようなフィールドについては、どの程度構造を残すかを決める必要があります。

DatablistでネストされたJSONをCSVに変換

DatablistのJSON変換ツールを開きます。エディターにJSONを貼り付けるか、.jsonファイルをアップロードできます。

貼り付けとアップロードに対応したDatablistのJSON to CSV変換ツール
貼り付けとアップロードに対応したDatablistのJSON to CSV変換ツール

小さなAPIレスポンスなら、貼り付けで十分です。大きなエクスポートでは、コピー&ペースト時の欠落を防げるため、ファイルのアップロードをおすすめします。ファイルの内容はブラウザで読み込まれ、変換のためにDatablistのサーバーへ送信されることなく、ブラウザ内でローカルに処理されます。

JSONを読み込むと、Datablistが構造を解析し、オブジェクトの配列を探します。ルートが配列でもオブジェクトでも読み込め、$.results、$.data.items、さらに深い階層の配列もスキャンします。

ファイルの構造が分かりにくい場合は、先にJSONCrackでJSONを開くこともあります。ツリー形式で可視化されるため、行にすべき配列を見つけやすくなります。必須ではありませんが、候補となる配列が複数あるファイルには便利です。

この例で正しい行ノードは、次のとおりです。

$.results

1行につき1社を出力したいため、$.resultsを選びます。この配列内の各要素が、CSVの1行になります。

CSV行にresults配列を指定した行ノードセレクター
CSV行にresults配列を指定した行ノードセレクター

Datablistは行ノードを提案できますが、私は必ず手動でも確認します。変換ミスの多くは、ここで発生します。JSONファイルには、企業の親配列、連絡先の子配列、タグやイベントの別の子配列が含まれていることがあります。どれも配列ですが、目的のCSVに合うものは一つだけです。

⚠️ 行ノードを変えるとデータセットも変わります

$.resultsと$.results[].contactsは、どちらも有効な行ノードですが、生成されるCSVは異なります。アカウント単位の行が必要なら親配列を、ネストされた項目そのものをデータセットにしたいなら子配列を選びます。

この記事では、親の行ノードを使用します。

  • $.results:1行につき1社または1アカウントになります。
  • $.results[].contacts:1行につき1件の連絡先になります。

2つ目の選択も正しい場合がありますが、出力内容が変わります。人物リストが必要なら連絡先単位のCSVが便利です。一方、アカウントのクレンジング、企業情報のEnrich、CRMへのレコードインポート、指標の確認には、企業単位のCSVが適しています。

適切な行ノードの選び方

行ノードとは、各要素がCSVの行になるJSON配列です。

よくある例は次のとおりです。

JSONパス適しているケース
$.resultsレコードがresultsキーの配下にある
$.data.itemsAPIがdataオブジェクト内にレコードを格納している
$.payload.recordsWebhookや社内エクスポートがpayload配下にレコードを格納している
$.results[].contactsネストされた連絡先を1行ずつ出力したい

私は選択前に、「1行で何を表すべきか」を確認します。

1行が企業、アカウント、注文、商品、掲載情報、イベントを表すなら、親配列を選びます。1行が連絡先、メールアドレス、注文明細、価格、コメント、子イベントを表すなら、子配列を選びます。

単純に見えますが、この選択でCSV全体が変わります。

$.resultsを選ぶと、CSVには企業のコンテキストが残ります。連絡先を別途処理しない限り、contactsフィールドはネストされた値として企業の行内に保持されます。$.results[].contactsを選ぶとCSVは連絡先リストになりますが、将来変換ツールにその機能が追加されない限り、親企業のフィールドは自動的には含まれません。

私の基本方針は、親配列から始めることです。まず安全にエクスポートでき、ネストされた配列も後から確認できます。子配列へ切り替えるのは、ネストされた項目自体が本当に必要なデータセットである場合だけです。

ネストされたJSONオブジェクトをフラット化

ネストされたオブジェクトを扱うには、単なるファイル形式の変換以上の機能が必要です。

例のファイルでは、metricsはオブジェクトです。

{
  "metrics": {
    "employees": 124,
    "revenue": {
      "amount": 476171,
      "currency": "USD"
    }
  }
}

スプレッドシートでは、JSONオブジェクトを含む一つのmetricsセルではなく、フィルタリングや並べ替えができる次の列が必要です。

  • employees
  • amount
  • currency

Datablistはネストされたオブジェクトのパスを検出し、フラット化する項目を選べます。CSVツールで扱いやすいため、実用的なスカラー値のフィールドはフラット化しておきます。

JSON to CSV変換ツールで検出されたネストオブジェクトのフィールド
JSON to CSV変換ツールで検出されたネストオブジェクトのフィールド

この例では、次のようにフラット化します。

  • metrics.employeesをemployeesへ
  • metrics.revenue.amountをamountへ
  • metrics.revenue.currencyをcurrencyへ
metricsとrevenueフィールドをフラット化する設定
metricsとrevenueフィールドをフラット化する設定

企業単位のCSVは、次のような出力になります。

CSV列元の値
id行の識別子
name企業名またはアカウント名
website設定に応じて、Webサイトの値、連結した配列、またはJSON文字列
contacts1行につき1社を出力する場合のネストされた連絡先データ
tags連結したラベルまたは元のテキスト
employeesmetrics.employeesの値
amountmetrics.revenue.amountの値
currencymetrics.revenue.currencyの値
createdAt元の日付または整形した日付

最初のエクスポートでは、分かりやすい列名をおすすめします。異なるオブジェクト内に同じ名前がある場合は、ダウンロード前にプレビューを確認してください。たとえば、billing.amountとrevenue.amountを、確認せずにどちらも曖昧なamount列へまとめるべきではありません。

💡 フラット化の基本方針

フィルタリング、並べ替え、列としてのインポートに使うスカラー値はフラット化します。フラット化によって意味が失われたり、セルが読みにくくなったりする構造化オブジェクトや配列は、JSONのまま保持します。

JSON行内の配列を処理する方法

CSVのセルはテキストを格納しますが、JSON配列はさまざまな意味を持つため、配列には個別の判断が必要です。

タグのリストと連絡先のリストは同じではありません。メールアドレスのリストと注文明細のリストも別物です。配列の意味が異なる場合、私はすべてに一つのルールを適用しません。

このサンプルファイルでは、次の設定を使用します。

フィールド推奨する処理理由
tags値を連結タグは単純なラベルなので、1セルにまとめても扱いやすい
website値を連結、またはJSONのまま保持読みやすさを優先するなら連結し、形式の混在が重要ならJSONを保持する
contacts企業単位の行ではJSONのまま保持連絡先オブジェクト自体にネストされたフィールドがある
contacts連絡先単位の行では$.results[].contactsを行ノードにする連絡先リストそのものが必要な出力の場合に適している

Datablistでは、値の連結、JSON文字列としての保持、先頭項目の取得などを、配列ごとに設定できます。

私の基本方針はシンプルです。

  • タグのような単純な配列は連結します。
  • 構造を残したい配列はJSON文字列として保持します。
  • 先頭のメールアドレスなど、最初の項目に明確な意味がある場合だけ先頭項目を取得します。
  • 配列の各項目を1行にすべき場合は、行ノードを変更します。

企業エクスポートでは、各連絡先に氏名、メールアドレス、電話番号があるため、contactsを構造化された値として保持します。一つのセルにフラット化するとCSVが読みにくくなり、最初の連絡先だけを取得するとデータが失われます。

連絡先エクスポートでは、代わりに$.results[].contactsを選びます。この場合、CSVには次のような連絡先単位の列が含まれます。

CSV列元の値
name連絡先名
emails連結したメールアドレス一覧またはJSON文字列
phones連結した電話番号一覧またはJSON文字列

違いは、コンテキストです。企業エクスポートでは企業の行がそのまま保持されます。連絡先エクスポートは人物に焦点を当てますが、将来ツールが対応しない限り、親企業のフィールドは各連絡先の行へ自動的にはコピーされません。

CSVの出力設定を行う

行ノード、フラット化、配列の設定が正しければ、CSVの出力を設定します。

私は通常、次の設定から始めます。

  • 区切り文字:標準的なCSVならカンマ。
  • ヘッダー行:有効。
  • 日付形式:出力先のスプレッドシートで別の形式が必要でなければ、元の形式を維持。

スプレッドシートツールやロケールでセミコロン区切りが求められる場合は、セミコロンを使います。小数点にカンマを使用することが多い欧州向けのスプレッドシート設定では、特に重要です。

日付は、最初のエクスポートでは元の形式を残すのがおすすめです。ISOタイムスタンプなら後から簡単に解析でき、タイムゾーン情報も保持できます。技術職ではないメンバー向けのCSVなら、日付を整形すると読みやすくなります。

ダウンロード前に、2種類のプレビューを確認します。

  • テーブルプレビューでは、行と列を確認できます。
  • Raw CSVプレビューでは、区切り文字、引用符、改行を確認できます。

🔑 エクスポート前にプレビューを確認

プレビューでは、行ノードの選択ミス、列の不足、読みにくい配列、区切り文字の問題を見つけられます。後からCRMやスプレッドシートへのインポート失敗を調査するより、ここで30秒確認するほうが効率的です。

配列や複数行のテキストがある場合は、Raw CSVプレビューも必ず確認します。数秒で済みますが、多くのインポート問題を事前に防げます。

CSVを確認してダウンロード

ダウンロード前に、次の項目を確認します。

  • 行数は、選択した行ノードと一致しているか?
  • 各行は、意図したエンティティを表しているか?
  • employees、amount、currencyは実用的な列に分かれているか?
  • 配列は読みやすいか、構造が重要な場合はJSONとして保持されているか?
  • nullの売上値は空欄、または次の工程で分かる形になっているか?
  • 日付はスプレッドシートやインポート先に適した形式か?
  • Raw CSVプレビューの区切り文字は想定どおりか?
変換後のテーブルを確認してCSVをダウンロード
変換後のテーブルを確認してCSVをダウンロード

確認できたら、CSVをダウンロードします。ファイルをアップロードした場合、ダウンロードファイル名には元のファイル名を利用できるため、CSVの出所を追跡しやすくなります。

エクスポート後は、DatablistのCSV editor、Excel、Google Sheets、または次に使うデータツールでファイルを開きます。Datablistでは、クレンジング、フィルタリング、重複排除、Enrich、翻訳を続けて実行できます。複数のエクスポートを作成した場合は、2つのCSVファイルを比較できます。ほかのツールで扱うには大きすぎる場合は、CSVを小さなファイルに分割できます。

CSVの出力イメージ

$.resultsを選ぶと、基本的な出力は1行につき1社または1アカウントになります。

CSV列各行内のJSONパス想定される値
id$.id行の識別子
name$.name企業名またはアカウント名
website$.websiteWebサイトの文字列、連結した配列、またはJSON文字列
contacts$.contacts1行につき1社を維持する場合の、連結またはJSON形式の連絡先配列
tags$.tags連結したラベルまたは元の文字列
employees$.metrics.employees従業員数
amount$.metrics.revenue.amount値がある場合の売上金額
currency$.metrics.revenue.currency値がある場合の売上通貨
createdAt$.createdAt元の日付または整形した日付

$.results[].contactsを選ぶと、1行につき1件の連絡先へ出力が変わります。

CSV列各連絡先内のJSONパス想定される値
name$.name連絡先名
emails$.emails連結したメールアドレス一覧またはJSON文字列
phones$.phones連結した電話番号一覧またはJSON文字列

どちらも有効なエクスポートですが、目的が異なります。

アカウントのクレンジング、企業属性データの確認、企業レコードのEnrich、CRMインポートの準備には、企業単位のエクスポートを使います。対象データが人物なら、連絡先単位のエクスポートを使います。

このワークフローが役立つケース

このワークフローは、入力形式がJSONで、実際の作業にはCSVを使いたい場合に役立ちます。

代表的な例:

  • メタデータ、ページネーション、ネストされたresults配列を含むAPIレスポンス。
  • 掲載情報、商品、連絡先、イベントを含むAPIベースのスクレイピング結果。
  • 企業データの中に連絡先、タグ、指標、カスタムフィールドがあるCRMやRevOpsのエクスポート。
  • バリエーション、価格、カテゴリー、サプライヤーを含むマーケットプレイスや商品カタログのエクスポート。
  • イベントがpayload配下にネストされているWebhookログ。
  • 変換後のCSVを翻訳したいローカライゼーションのワークフロー。

手順は毎回同じです。行にする配列を見つけ、必要なオブジェクトフィールドをフラット化し、配列の扱いを決め、エクスポート前にプレビューします。

ネストJSONからCSVへの変換トラブル対処法

JSONが無効な場合は、まず元のファイルを確認します。カンマの欠落、コピーされたコンソールログ、末尾の余分なテキスト、不完全なダウンロード、エスケープされていない引用符などが解析エラーの原因になります。無効なJSONは元データ側で修正する必要があるため、変換設定を変える前にファイルを検証します。

行ノードが見つからない場合、ファイルにオブジェクトの配列が含まれていない可能性があります。スカラー値だけを持つ単一オブジェクトでは、このワークフローに必要な行を作れません。プリミティブなルート、文字列、数値、単一値からは、有用なCSV行を生成できません。

プレビューに意図しない行が表示された場合は、選択した行ノードを変更します。多くの場合、変換ツールは配列を見つけていますが、想定した配列とは異なります。$.results、$.data.items、$.payload.recordsなど、レコードが格納されているパスを探してください。

連絡先、タグ、注文明細、イベントが読みにくい場合は、配列の処理方法を調整します。単純なリストは連結します。詳細を残したい構造化配列はJSONとして保持します。ネストされた各項目を行にしたい場合は、子の行ノードへ切り替えます。

大きなファイルの処理が遅い場合は、ブラウザや端末の性能も影響する点にご注意ください。DatablistはWeb Workerで解析と変換を実行するため、メインのUIスレッドでは処理されませんが、実用上の上限はローカル環境のメモリとCPUに左右されます。

ほかのツールでCSVを正しくインポートできない場合は、別の区切り文字を試し、ヘッダー行を有効にしたまま、Raw CSVプレビューを確認します。JSON値にテキスト、配列、ネストされたオブジェクトが含まれると、引用符や改行が影響することがあります。

ブラウザ内で行われる処理

Datablistは、ブラウザのWorker内でJSONを解析して変換します。Workerは行ノードの候補を解析し、解析済みオブジェクトをキャッシュして、選択したノードをCSVへ変換し、プレビューと結果を画面へ返します。

これが重要な理由は2つあります。

1つ目は、変換処理がメインのUIスレッドで実行されないことです。そのため、ファイルの解析中もページを操作しやすくなります。

2つ目は、変換のためにDatablistのサーバーへ送信されるのではなく、ブラウザ内でローカルに処理されることです。APIエクスポート、スクレイピング結果、社内データファイルを扱い、サーバー型の変換ツールへアップロードしたくない場合に便利です。

ただし、通常のデータ取り扱いルールには従ってください。ブラウザ内でのローカル処理は有用ですが、企業のプライバシーやコンプライアンスポリシーに代わるものではありません。

まとめ

ネストされたJSONからCSVへの変換で最も重要なのは、適切な行ノードを選ぶことです。行にする配列が決まれば、その後の作業は進めやすくなります。

この例では、$.resultsを選ぶと1行につき1社になります。metrics.employees、metrics.revenue.amount、metrics.revenue.currencyをフラット化すると、スプレッドシートで使いやすい列を作成できます。配列の設定によって、tags、website、contactsを読みやすいテキストにするか、JSONとして保持するか、連絡先単位の別のエクスポートにするかが決まります。

JSON to CSV変換ツールを開き、ネストされたJSONエクスポートをアップロードして、行ノードを選びます。プレビューを確認したらCSVをダウンロードしてください。クレンジング、フィルタリング、重複排除、Enrich、翻訳が必要な場合は、エクスポートしたファイルをDatablistのCSV editorで開けます。

FAQ

ネストされたJSONをCSVに変換する方法は?

行にするJSON配列を選べる変換ツールを使用します。Datablistでは、JSONを貼り付けるかアップロードし、行ノードを選びます。次に、必要なネストオブジェクトのフィールドをフラット化し、配列の処理を設定して、テーブルをプレビューしてからCSVをダウンロードします。

results配下のレコードをCSVに変換できますか?

はい。results配下の各項目をCSVの1行にする場合は、行ノードとして$.resultsを選びます。

data.itemsやpayload.recordsをCSVにする方法は?

行にしたいオブジェクトがそのパスに含まれている場合は、行ノードとして$.data.itemsまたは$.payload.recordsを選びます。正確なパスはJSONの構造によって異なります。

ネストされたJSONフィールドをCSV列にする方法は?

metrics.revenueなど、ネストされたオブジェクトパスのフラット化を有効にします。その後、エクスポート前にプレビューで生成された列を確認してください。

JSON行内の配列はどう処理すればよいですか?

タグのような単純なリストは連結します。構造を保持する必要がある配列はJSON文字列のまま残します。配列内の各項目を個別の行にしたい場合は、より深い階層の行ノードを選びます。

大容量のJSONファイルをオンラインでCSVに変換できますか?

はい。ブラウザと端末でファイルを処理できる場合は変換できます。DatablistはWeb Workerを使って解析と変換を行いますが、非常に大きなファイルの処理性能はローカル環境に左右されます。

機密データにオンラインJSON to CSV変換ツールを使っても安全ですか?

Datablistの変換ツールは、ファイルを変換のためにDatablistのサーバーへ送信せず、ブラウザ内でローカルに処理します。ただし、所属組織のデータ取り扱いルールには従ってください。

JSON to CSV変換の行ノードとは何ですか?

行ノードとは、その各項目がCSVの行になるJSON配列です。たとえば、$.resultsを選ぶと、results配列内の各オブジェクトからCSVの1行が作成されます。

$.resultsではなく$.results[].contactsを選ぶとどうなりますか?

CSVは、1行につき1社または1アカウントではなく、1行につき1件の連絡先になります。将来ツールがその動作に対応しない限り、親企業のフィールドは自動的には含まれません。

CSVをエクスポートした後は何をすればよいですか?

Datablistや別のスプレッドシートツールで開き、クレンジング、フィルタリング、重複排除、Enrich、翻訳、ほかのシステムへのインポートを行います。