メインコンテンツへスキップ

← ブログ一覧へ

JSON を CSV・Excel に変換する方法(と、戻す方法)

コードは JSON、表計算は CSV と Excel を話します。遅かれ早かれ、データをこの間で移す必要が出てきます。3 つの形式は同じ行と列を持っています——コツは、変換で壊さないことです。その方法を紹介します。

クォートの規則は説明より実物で。 [{"name":"Ada","dept":"R&D","hours":7.5},{"name":"Bo","dept":"Sales, EU","hours":8}] を JSON → CSV 変換に通すと、こう返ってきました。

name,dept,hours
Ada,R&D,7.5
Bo,"Sales, EU",8

最後の行を見てください。R&D はそのままですが、Sales, EU には二重引用符が付きます。値の中に区切り文字そのものが含まれているからです。手書きの CSV 出力が壊れる原因はたいていこの 1 点で、値の中のカンマが 1 列を静かに 2 列に変えてしまいます。入力をコピーすればご自身で確認できます。

各形式の用途

  • JSON——コードや API のための構造化データ。表形式では通常オブジェクトの配列:[{"name":"Ann","age":30}, …] で、各オブジェクトが 1 行です。
  • CSV——プレーンテキストの表(カンマ区切り)。汎用的で軽く、ほぼ何にでも取り込めます。
  • Excel(.xlsx)——書式・複数シート・数式を持つバイナリの表計算。多くの同僚が実際に開くのはこれです。

JSON → CSV

最も変換しやすいのはフラットなオブジェクトの配列です。各オブジェクトが 1 行になり、キーがヘッダー行になります。入れ子のオブジェクトは平面の表にきれいに対応しないので、先に平坦化してください(または最上位だけが変換されると考えてください)。

ヘッダー行の出どころにも注目してください。私たちの変換器が出した name,dept,hours は、最初のオブジェクトのキーを読んだ結果で、全レコードを走査した結果ではありません。2 番目のレコードに余分なキーがあれば、そのキーには行き場がありません。これが「平坦化と正規化はエクスポートの前に行う」実務的な理由です。

JSON → Excel

考え方は同じですが、出力は Excel・Numbers・Google スプレッドシートで直接開ける .xlsx です——取り込み手順は不要。表計算中心の人にデータを渡すときに最適です。

CSV・Excel → JSON

逆方向では、表計算をコードが解析できるオブジェクトの配列に変えます——DB への投入、API への供給、テストデータの読み込みに便利です。

入れ子 JSON の平坦化

CSV と Excel は平らな表なので、入れ子は先に展開します。慣例はキーをドット記法にすることです:

[{ "name": "Ann", "address": { "city": "Berlin", "zip": "10115" } }]

これは name・address.city・address.zip の 3 列を持つ表になります。配列は厄介です:値の並びは 1 つのセルに連結されがち("red; green")で、オブジェクトの並びは通常 1 件 1 行が必要です。列を揃えるため、変換前に形を決めておきましょう。

区切り文字・引用符・エンコーディング

CSV のトラブルの多くは 3 点に集約されます:

  • 区切り文字。「カンマ区切り」は万国共通ではありません。多くの欧州ロケールではカンマが小数点なので、Excel は代わりにセミコロンを期待します。列が分かれないなら区切り文字を変えましょう。
  • 引用符。 区切り文字・引用符・改行を含む値は二重引用符で囲み、内側の引用符は二重にします:"She said ""hi"""。
  • エンコーディング。 UTF-8 で保存を。Excel はアクセント付きや日本語などを正しく表示するのに **BOM(バイト順マーク)**を必要とすることが多く、無いと é のような文字化けになります。

引用符は CSV が往復に耐えるかを決める部分で、入力 1 つで決着します。私たちのJSON ↔ CSV/Excel 変換ツールに、一方の値にカンマ、もう一方に & を含む 2 レコードを渡しました:

[{"name":"Ada","dept":"R&D","hours":7.5},{"name":"Bo","dept":"Sales, EU","hours":8}]

返ってきたのは

name,dept,hours
Ada,R&D,7.5
Bo,"Sales, EU",8

引用符が付いたのは Sales, EU だけで、R&D には付きません。規則はこれだけです —— 区切り記号、引用符、改行のいずれかを含むときだけ引用し、それ以外は裸のまま。すべてを引用する変換器も妥当な CSV を出しますが、ファイルは倍になり、生の文字列を比較する素朴なパーサーを壊します。何も引用しない変換器は、2 レコードを黙って 3 列に変えてしまいます。

なぜ Excel は数値を壊すのか

CSV を Excel で開くと、00123 のような ID は先頭の 0 が消え、注文番号のような長い数字列は指数表記(1.23E+11)になり、日付に見えるものは「気を利かせて」書式変更されます。これはデータの不具合ではなく Excel の表示変換です。保持するには、貼り付け前に列を文字列書式にするか、「データ → テキストまたは CSV から」で取り込み、その列を文字列に指定します。変換前に よくある JSON エラーで検証し、余分なカンマ 1 つで変換全体が崩れないようにしましょう。

ブラウザ内で、アップロードなし

データファイルには機微な情報が含まれることが多く、アップロードするツールはリスクです。以下はすべて端末内で動作します。

  • JSON ⇄ CSV ⇄ Excel 変換——JSON か CSV を貼り付け、または .xlsx をアップロードして三者間で変換。
  • JSON 整形——先に JSON を整えて検証すると、変換が予測どおりになります。

きれいに変換するコツ

  • JSON をキーが揃ったオブジェクトの配列にする——列と 1:1 で対応します。
  • 先に JSON を検証する(カンマ 1 つで壊れます)。
  • Excel では出力が本物の .xlsx であることを忘れずに(CSV のリネームではありません)。

「オブジェクトの配列」という形を押さえれば、JSON・CSV・Excel 間の移動は 2 クリック・アップロード不要の作業になります。