メインコンテンツへ移動

JSONからExcelへ

「JSONからExcelへ」は、ブラウザ内で本物の.xlsxワークブックを書き出します。.xlsにリネームしたCSVではありません。数値は数値のまま、文字列は文字列のまま保たれ、ヘッダー行は固定されてフィルターが付き、ネストしたオブジェクトは明示的な列パスに変換されます。アップロードは一切行われません。

端末内で処理
JSON
490 B30 行行 1、列 1
ブックのプレビュー5.7 KB
ブックのプレビュー
idcustomer.namecustomer.emailtotalcurrencytags[0]tags[1]shippednote
ord_1041Ada Lovelace[email protected]148.5GBPprioritygiftTRUE—
ord_1042Grace Hopper[email protected]92USDstandard—FALSE隣人に預ける
2 行 · 9 列 · 数値 1

JSONからExcelへはどう動きますか?

ウェブ上のほぼすべての「JSONからExcelへ」変換ツールは、.xlsという拡張子のCSVファイルを作り出します。この違いは思った以上に重要です。CSVのセルはテキストでしかありません。そこでExcelは推測します。00123を数値123として読んで先頭の0を飲み込み、望むと望まざるにかかわらず2026-10-03を日付と決めつけ、1e5を十万に変えてしまいます。Excelは親切心でそうしているのですが、ファイルには型情報がないため、止める方法がありません。

ワークブックは型を運びます。このツールはSpreadsheetML(.xlsxの中身のXMLパート)を書き出します。そのため、JSONの数値は数値セルに、JSONの文字列は文字列セルに、ブーリアンは本物のブーリアンになります。"00123"は00123のままです。ドキュメントが文字列だと言っているからです。

ネストしたオブジェクトと配列

表計算は長方形であり、JSONは木構造です。どこかで折り合いをつけるしかありません。ここでの選択は明示的なパス表記で、JSONからCSVへの変換ツールと同じものです。オブジェクトのメンバーにはcustomer.nameを、配列のインデックスにはtags[0]を使います。2つの表記は意図的に変えてあり、列名の由来が曖昧になることはありません。

列の集合は、全レコードのフィールドの和集合を、最初に現れた順に並べたものです。素朴な実装では最初のレコードのキーだけを読むため、後から現れるものをすべて失います。50件に1件しか現れない任意のメモ、時々しか効かない割引など。このツールではそうしたフィールドにも列が用意され、他の行は空セルになります。

ワークブックの中身

太字で固定されたヘッダー行により、スクロールしても列名が画面に残ります。オートフィルターにより、どの列もワンクリックで絞り込めます。列幅は各列の最も広い値から実測され、Excelの既定値のままにはなりません。アーカイブは、バッチ画像エクスポートと同じZIPライターで書き込まれます。表計算ライブラリは読み込みません。このフォーマットは2006年から変わっておらず、依存関係を追加するとこのルートのバンドルで最も大きなものになってしまうからです。

JSON入力

[
  { "id": 1, "user": { "name": "Ada" }, "tags": ["a","b"], "vip": true },
  { "id": 2, "user": { "name": "Grace" }, "tags": ["c"] }
]

ワークブックのセル

A1: id      B1: user.name   C1: tags[0]   D1: tags[1]   E1: vip
A2: 1       B2: Ada         C2: a         D2: b         E2: TRUE
A3: 2       B3: Grace       C3: c         D3: (empty)   E3: (empty)

JSON入力 → ワークブックのセル

JSON入力

[
  { "id": 1, "user": { "name": "Ada" }, "tags": ["a", "b"], "vip": true },
  { "id": 2, "user": { "name": "Grace" }, "tags": ["c"], "note": "gift" }
]

ワークブックのセル

id  user.name  tags[0]  tags[1]  vip   note
1   Ada        a        b        true
2   Grace      c                       gift

JSONからExcelへが対応するオプションとエッジケースは?

技術リファレンスとオプション
パラメータ型デフォルト動作とエッジケース
出力形式.xlsxSpreadsheetML本物のOOXMLワークブックです。型付きセル、固定ヘッダー行、オートフィルター、実測の列幅を備えます。.xlsにリネームしたCSVにはそのどれも持たせられないことが、両者の決定的な違いです。
数値セル型数値JSONの数値は数値セルになるため、合計や平均ですぐに計算できます。JSON文字列として書かれた数値は文字列のまま残り、これが製品コードや電話番号、先頭の0を守ります。
配列explode | joinexplodeExplodeはtags[0]やtags[1]といった列を生成し、全要素を保持します。Joinはスカラーの配列を、指定した区切り文字で1つのセルにまとめます。表を読む人には通常こちらが望ましいものの、情報は失われます。オブジェクトの配列は常にexplodeで処理します。結合すると構造が壊れるためです。
ネストしたオブジェクト列パスcustomer.nameオブジェクトのメンバーにはドット形式、配列のインデックスには角括弧形式を使うため、両者は区別でき、列の集合は曖昧になりません。セルに[object Object]を貼り付けるような変換ツールこそ、これが避ける失敗です。
列の集合和集合全レコードいずれかのレコードに現れるすべてのフィールドを、最初に現れた順に並べます。最初のレコードからヘッダーを読むのが、エクスポートが黙ってデータを失う最もよくある原因です。
ヘッダー行の固定真偽値true1行目を固定し、長いエクスポートをスクロールしても列名が見えたままになります。Excelでは「ウィンドウ枠の固定」と呼ばれる機能で、読み手が設定するのではなく、シートのビューに書き込まれます。
オートフィルター真偽値trueヘッダー行にフィルターのドロップダウンを追加します。データ行が少なくとも1行必要です。ヘッダーだけにフィルターをかけても、対象となるデータがないためです。
最上位の構造array | objectarrayレコードの配列が想定される入力です。オブジェクト1つは1行になります。唯一の配列メンバーがデータそのものになっているオブジェクト(ほとんどのAPIが返す{"data":[…]}という形)は、その配列を利用し、その旨を示します。
入力サイズバイト8 MBすべてメインスレッドで動くため、この上限を超えるとワークブックの生成は試みずに拒否されます。サイズにかかわらず、アップロードは一切行われません。

よくある質問

これは本物のExcelファイルですか、それとも拡張子を変えただけのCSVですか?

本物のワークブックです。出力はOOXMLの.xlsx、つまりSpreadsheetMLパートを束ねたZIPで、型付きセル、太字で固定されたヘッダー行、オートフィルター、実測の列幅を備えています。ここが決定的な違いです。.xlsにリネームしたCSVには型情報がないため、Excelはすべてのセルを推測せざるを得ず、先頭の0や製品コード、日付に見えるものについては推測を間違えます。

先頭の0は保持されますか?

はい。JSONで文字列として入っていれば保持されます。{"sku":"00123"}はテキスト00123を書き込み、セルが文字列だと宣言しているためExcelは00123と表示します。{"sku":123}は数値123を書き込みますが、これはドキュメントが正確なだけで、ツールが何かを失ったわけではありません。CSVベースのエクスポーターへの最大の不満がまさにこれであり、このツールがワークブックを書く理由です。

ネストしたオブジェクトや配列はどうなりますか?

列パスに変換されます。{"customer":{"name":"Ada"}}はcustomer.nameという列になり、tagsはtags[0]とtags[1]になります。配列には角括弧、オブジェクトにはドットと、表記を意図的に分けているため、列名の由来が曖昧になることはありません。配列を1つのセルにまとめたい場合はJoinモードに切り替えてください。ただしこれは情報が失われる処理で、スカラーの配列にのみ適用されます。

レコードによって持っているフィールドが違う場合、足りない部分は捨てられますか?

いいえ。列の集合は全レコードのフィールドの和集合で、最初に現れた順に並びます。50件に1件しか現れないメモにも専用の列ができ、他の行は空セルになります。最初のレコードからヘッダーを読むエクスポーターは、そうしたフィールドを黙って失います。

データはどこかにアップロードされますか?

いいえ。ワークブックはブラウザ内で組み立てられ、そのままダウンロードに渡されます。DevToolsを開いてネットワークパネルを見ながら、ドキュメントを貼り付けてダウンロードを実行してみてください。リクエストは一つも飛びません。これは見た目以上に重要です。表計算に入れられるJSONは、本物のレコードをエクスポートしたものが多いからです。

どのくらいの大きさのドキュメントまで扱えますか?

JSONで8 MBです。数万レコードに相当します。それを超えると、ツールはタブを固めてしまう代わりに処理を断ります。作業がメインスレッドで行われるためです。ワークブック自体は入力に比べて小さくなります。アーカイブはXMLテキストを保持し、deflatedではなくstoredエントリで書き込まれるため、同等のCSVより少し大きくなると考えてください。

JSONからExcelへでできるそのほかのことは?