JSONをCSV・YAMLに変換するときの注意点|ネスト構造はどうなる?
APIのレスポンスをExcelで確認したい、設定ファイルをYAMLに書き換えたい—— JSONを他の形式に変換する場面は多くあります。ただし、JSONとCSV・YAMLは 表現できる構造が異なるため、変換時に情報が変わったり失われたりすることがあります。 変換する前に知っておきたい注意点をまとめました。
JSON→CSVで起きること:ネストはどう展開されるか
CSVは「行と列」の二次元の表です。一方JSONは、オブジェクトの中にオブジェクトが 入る「入れ子(ネスト)」構造を許します。この差を埋めるため、変換ツールの多くは ネストしたキーを、ドット区切りの列名に展開します。
// 変換前のJSON
{ "name": "太郎", "address": { "pref": "東京都", "city": "渋谷区" } }
// 変換後のCSV(ヘッダー行)
name,address.pref,address.city
太郎,東京都,渋谷区
展開の方式はツールによって異なり、ドット区切りではなく列を分けて 表現する場合もあります。変換後は、想定どおりの列名になっているか 必ず確認してください。
配列が含まれる場合は要注意
値が配列の場合、1つの行に複数件のデータを収められないため、 「行を複製して展開する」か「カンマ区切りなどで1セルにまとめる」かの どちらかで処理されます。どちらの方式でも、元の件数や順序を 変換後に見失わないよう、件数を変換前後で照合することをおすすめします。
JSON→YAMLは情報の欠落が少ない
YAMLはJSONと同じく、ネストしたオブジェクトや配列をそのまま表現できます。 そのため、JSON→YAMLの変換は、JSON→CSVに比べて情報が失われにくく、 構造を保ったまま読みやすい形式に変換できます。
# 変換後のYAML name: 太郎 address: pref: 東京都 city: 渋谷区
ただし、JSONにはなくYAMLにだけある機能(アンカーやエイリアスなど)を 使いこなす必要はなく、単純な変換であれば見た目がインデント表記に 変わるだけと考えて差し支えありません。
数値・真偽値・nullの扱いに差が出ることがある
CSVはすべてのセルが文字列として扱われるため、変換後に
trueや123が、文字列の"true"や"123"なのか、
もとの型なのかが判別できなくなります。CSVから再度JSONに戻す
「往復変換」を行う場合は、型の情報が失われている前提で、
読み込み側で型を再定義する必要があります。
文字コードと改行、カンマの扱い
値の中にカンマや改行、ダブルクォートが含まれる場合、CSVでは ダブルクォートで値を囲むなどのエスケープが必要です。多くのツールは 自動で処理しますが、Excelで開いたときに列がずれる場合は、 この部分が正しく処理されていない可能性があります。
変換前にJSONの構文が正しいか確認する
変換元のJSONに構文エラーがあると、変換自体が失敗します。 変換がうまくいかない場合は、まず JSONの構文エラーの直し方 を参考に、JSON自体が正しい形式かを確認してください。
まとめ
JSON→CSVはネストや配列の展開方法によって見た目が変わり、型の情報も 失われます。JSON→YAMLは構造を保ったまま変換できるため、情報の 欠落は比較的少ない形式です。用途に応じて、どちらに変換するかを 選んでください。
実際の変換は JSON整形ツール のCSV・YAML変換機能から行えます。