JSONとCSV:意味を失わずにデータを移す

変換成功とは、ファイルが開くことだけではありません。商品識別子は識別子、価格は価格、欠損値は欠損値のままにする必要があります。型や構造の誤りは、エラー表示なしで通る場合があります。

平らな表か、入れ子のデータか

CSVは行とフィールドからなる表に適しています。JSONは型のある値、リスト、入れ子のオブジェクトを表せます。1件に複数の住所や商品がある場合、CSVへ出す前に列への展開方法を決めましょう。すべての構造に唯一の正しい表の形があるわけではありません。

参考資料: IETF RFC 8259 — JSON Data Interchange Format · IETF RFC 4180 — Common CSV Format

整形と検証は別の仕事

JSONの整形で字下げは読みやすくなりますが、価格や日付が正しいとは証明できません。スキーマ検証は指定された型や必須項目を確認し、データの意味は引き続きアプリの規則が決めます。

JSONの引用符付き文字列は数値とは異なります。CSVでは、カンマや改行を含むフィールドを適切に引用符で囲み、囲まれた中の引用符は2つ重ねます。

参考資料: IETF RFC 8259 — JSON Data Interchange Format · IETF RFC 4180 — Common CSV Format

変換後に確認すること

元データを保存します。件数と列名を比べ、通常のレコードに加え、空欄、句読点、多言語テキストを含むものも確認します。出力を実際に使うアプリで開いてください。変換ツールは、そのアプリの読み込み設定までは保証できません。

  • 先頭の0も識別子の一部なら、0017などは文字列で保ちます。
  • 空の値、null、0を意図せず同一扱いしないでください。
  • 認証情報や実在する人の記録ではなく、作ったサンプルを使いましょう。
  • 出所不明のCSVを表計算ソフトで開く際は注意してください。セルが文字列でなく数式と解釈される場合があります。

参考資料: OWASP — CSV Injection

例:名前の中にカンマがある場合

サンプルJSONは {"sku":"0017","name":"ノート, 青","price":12.5} です。カンマ区切りCSVでは商品名を引用符で囲み、0017,"ノート, 青",12.5 とします。

読み込み後、skuが17でなく0017のままか、商品名が2列に分かれていないか確認します。出力ファイルができただけでは、どちらも確かめられません。

ほかの関連ツール

参考資料