メインコンテンツへ移動

JSONからExcelスプレッドシートへ

最短の手順はJSON→Excel変換ツールです。ブラウザ内で本物の.xlsxを書き出すため、数値は数値のまま、先頭のゼロも保持され、日付への誤変換も起きません。CSVが必要な場合はコンバーターで生成でき、Excel取り込みの3つの定番トラブルも避けられます。

端末内で処理
ツールだけ使いたい方はJSONからExcelへへ型付きのExcelワークブックを作成。拡張子を変えたCSVではないツールを開く

JSONからExcelスプレッドシートへとは

APIのエクスポートもデータベースのダンプも木構造です。Excelは長方形。どのJSON→CSV変換も、{"customer":{"name":"Ada"}}を何にするか決めなければなりません。手を抜いた答え——オブジェクトを捨てる、セルに[object Object]を貼る、JSONの塊を1フィールドに詰め込む——は、午後ひとつを丸ごと無駄にする答えです。ここでは、ネストしたオブジェクトは明示的な列パス(customer.name)へフラット化され、配列の要素は独自の列(tags[0]、tags[1])を受け取り、列の集合は全レコードの和集合になります。50行に1行しか現れないフィールドでも、ちゃんと届きます。

CSVをExcelに入れるほうが、実際に壊れる側の半分です。壊れ方は3通りあり、いずれも予測できます。エンコード(BOMのないファイルで古いExcelはANSIを想定するため、éはéとして届く)、区切り文字(カンマが小数点記号であるロケールでは、Excelはセミコロンを期待し、カンマのファイルを1列として開く)、インポートのヒューリスティック(商品コードが日付になり、先頭ゼロが消える)。どれもCSV自体の欠陥ではありません。

このページは、それらの失敗を一切なしでJSONデータを表計算ソフトへ届けるためのレシピです。知っておく価値のある変換の判断、貼り付け経路とインポート経路の違い、どの区切り文字を選ぶかを決めるロケールの癖を扱います。変換はブラウザ内で動きます。JSONのエクスポートは実在の人々についての実在のレコードであり、サーバーを迂回する必要はないのです。

ブックを書き出すのはJSON→Excel変換ツールです。JSONを貼り付けると、見出し行を固定してフィルターも使える.xlsxをダウンロードできます。

データ内の引用符とカンマが行を壊し続けるなら、CSV形式を解説したガイドが、どの表計算ソフトも従うクォートのルールを解説します。

ネストしたJSONからフラットなグリッドへ

レコードの配列を貼り付けると、それぞれがリーフパスへフラット化されます。{"customer":{"name":"Ada"}}はcustomer.nameという列を生み、tags配列はtags[0]、tags[1]と続いていきます。2つの記法は意図的に区別できるようにしてあります。ドットだけでは、a.0が配列なのか、0というキーを持つオブジェクトなのか言えないからです。これこそが、CSVを経由してJSONへ戻る往復を可逆にするものです。

表計算ソフトの中では、さらに2つの判断が効いてきます。スカラーの配列は、列に展開する代わりに1つのセルへ結合できます(priority, gift)。読みやすい反面、不可逆なので、スカラーにだけ適用されます。オブジェクトの配列は常に展開します。結合したら破壊になるからです。そしてnullは、表計算ソフトが文字列として扱ってしまう「null」というテキストではなく、空セルになります。クォートはRFC 4180に従います。フィールドは、区切り文字・引用符・改行を含むときにだけクォートされ、フィールド内の引用符は2重化されます。

古いExcelのUTF-8 BOM問題

このツールからダウンロードするCSVは、バイト順マーク(BOM)なしのUTF-8です。これは現代の標準であり、エンコードを正しく読むプログラムすべてに対して正しい選択です。古いExcel(特に2016以前)はそうではありません。BOMがなければANSI——旧来のWindowsコードページ——を想定し、127を超える文字がすべて文字化けします。éはéになり、CuraçaoはCuraçaoになり、氏名も住所もスープになります。ファイルは無実です。間違っているのは想定のほうです。

直し方はインポート経路です。データ → テキストまたはCSVから(古いバージョンではデータ → テキストファイル)でファイルを選び、ダイアログでエンコードを65001: Unicode (UTF-8)に設定します。最近のMicrosoft 365のビルドは、たいてい自力でUTF-8を検出しますが、このダイアログこそどのバージョンでも頼れる経路です。しかも同じダイアログで区切り文字も上書きでき、次の癖が同じ手順の中で解決します。生のCSVテキストをシートに貼り付けると、Text to Columnsで分割するまで1列に沈みます。だからフィールドがいくつかを超えるものについては、インポート経路のほうが速い経路でもあります。

どの区切り文字を選ぶか

理由がなければカンマ。ただし理由はよくあるものです。区切り文字とロケールは絡み合っているからです。ヨーロッパと南アメリカの多くの地域では、カンマは小数点記号であり、そこのExcelはセミコロンをリスト区切りとして扱います。カンマ区切りのファイルは巨大な1列として開き、セミコロン区切りのファイルは綺麗に開きます。判断表は次のとおりです。

受け先選択理由
カンマロケール(英国、米国)のExcelカンマExcelのリスト区切りと一致。ダブルクリックで開ける
セミコロンロケール(ヨーロッパの多く)のExcelセミコロンカンマは小数点記号として手一杯
カンマと引用符だらけのフィールドタブタブはデータ内にほとんど現れないため、クォートが稀で済む
パイプ区切り入力を仕様に明記しているシステムパイプ次にファイルを消費するものに合わせる

Excelのインポートヒューリスティック:日付、ゼロ、長い数値

完璧に形成されたCSVでも、開いた後のExcelに壊されることがあります。犯人はインポーターであって、ファイルではありません。日付に似た値(2-2024、3/4)は本物の日付へ変換され、先頭ゼロ付きの商品コードや郵便番号はゼロを失い(007は7になります)、長い数値のIDは科学技術表記へ切り替わり、末尾の桁は永久に失われます。ダブルクリックでは、これらの再解釈は一方通行です。

防御は同じダイアログです。データ → テキストまたはCSVからなら、何かが取り込まれる前に列をテキストへ設定できるので、各値は書かれたとおりに届きます。貼り付けるデータでは、先に受け先の列をテキスト形式にしておきます。ここは強く主張する価値があります。被害が無音だからです。数字の郵便番号の列は正しく見え、誰かが消えた先頭ゼロに気づいたころには、元のCSVはとっくに手元にありません。

実用上の限界を、はっきりと

このコンバーターはJSONを厳密に解析します。末尾のカンマやスマートクォートは黙って容認されるのではなく、行と列つきで報告されます。入力は8 MBで打ち止めです。変換はメインスレッドで動くため、それを超えるとタブを固める代わりに辞退します。そしてCSV自体に、どのコンバーターも取り除けない硬い制約があります。セルは文字列22201と数値22201を区別できず、空セルと存在しないフィールドも区別できません。だから往復のページでは、可逆性を約束する代わりに、この2つの注意を文書化しているのです。

よくある質問

JSONをCSVに変換するとき、JSONはアップロードされますか?

いいえ。変換は、あなたのブラウザタブの中での1回の関数呼び出しです。ドキュメントを送りつける先のAPIルートが存在しません。確かめられます。DevToolsを開き、Networkパネルを見ながらドキュメントを貼り付けてください。それを運ぶリクエストは1つもありません。ページのContent-Security-Policyはconnect-src 'self'を設定しているので、ブラウザは外向きのアップロードをいずれにせよ拒否します。JSONのエクスポートは実在のレコードです。変換がローカルに留まるのは、まさにそのためです。

CSVをExcelで開くと、アクセント付き文字がおかしく見えるのはなぜですか?

BOMのないCSVでは、古いExcelはANSIを想定します。このツールの出力はBOMなしのUTF-8——現代として正しい標準です。データ → テキストまたはCSVからでインポートし、エンコードを65001: Unicode (UTF-8)に設定すれば、アクセントは生き残ります。Microsoft 365のビルドは、たいてい自力でUTF-8を検出します。

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

オブジェクトはドット付きのパス——customer.name——へフラット化され、配列はブラケット付きのパス——tags[0]、tags[1]——になります。列の集合は、全レコードにわたる和集合で、最初に現れた順です。そのため省略可能なフィールドは、捨てられる代わりに、他の行では空セルになる列を1つ受け取ります。展開モードは往復可能です。結合モードはスカラー配列を1つのセルへ詰め込み、設計上、不可逆です。

CSVが1列だけとして開くのはなぜですか?

区切り文字が、お使いのExcelの期待と合っていません。たいていは、セミコロンロケールでのカンマのファイルです。そこではカンマが小数点記号です。データ → テキストまたはCSVからでインポートしてダイアログで区切り文字を指定するか、コンバーターへ戻ってセミコロン(またはタブ)を選び直してください。壊れているのはファイルではなく、推測のほうです。

商品コードが日付になったり、先頭ゼロを失ったりしたのはなぜですか?

ファイルではなく、Excelのインポートヒューリスティックの仕業です。日字形のものは日付になり、数字形のものからは先頭ゼロが剥がれ、長いIDは科学技術表記へ行ってしまいます。データ → テキストまたはCSVからを使い、インポートの前にそれらの列をテキストへ設定してください。貼り付ける場合は、受け先の列をテキスト形式にしておきます。

CSVをJSONへ戻せますか?

はい。CSV→JSON変換ツールが同じ列パスからネストを再構築するので、往復すれば出発点のドキュメントに戻ります。注意が2つあり、これはCSV自体の性質です。セルは文字列と数値を区別できず、空セルと存在しないフィールドも区別できません。その2つの区別は、元のJSONの中にだけ存在します。