JSON parent/child CSV roundtrip guide

注文JSONをCSVで編集して戻す:親子キー・順番・nullを保つ手順

入れ子の注文JSONを親CSVと明細CSVへ分け、親キー・子の順番・型・nullを残したまま、明細Bの数量だけ3から4へ直します。

親2件・子3件の対応を見る

元の orders 配列には注文 001002 があり、明細はA/B/Cの3件です。親と子を別々の表にしても、parent_id と0始まりの ordinal を残せば、配列同士の直積を作らずに元の関係へ戻せます。

明細対応
0010:A / 1:B001に2件
0020:C002に1件

親CSVと子CSVへ分ける

parents.csv は注文IDとnoteの意味を持ち、children.csv は親ID・順番・SKU・数量を持ちます。固有キーがない場合の仮IDは文書内で固定し、別の資料のIDと混ぜません。schema/mapping.json に列、JSON path、型、null方針を残します。

parent_id=001
ordinal=0 → A
ordinal=1 → B
親キーと子の順番を一緒に保持。
001.note = null
002.note = ""
空欄だけでnullにしない
nullと空文字は型情報で区別。

明細Bの数量だけ3から4へ変える

edited-children.csv では 001 / ordinal 1 / Bqty だけを 3 → 4 にします。親のID・note、明細A/C、順番は変更しません。数量合計は元の6から7になります。

変更前変更後変更path
001 / 1 / Bqty 3qty 4/orders/0/items/1/qty
その他そのままそのままなし

値・型・関係を比較して戻す

expected.json では注文数2、明細数3、数量合計7です。IDと数量の型、子の並び、001.note=null002.note=""、明細がない場合の空配列を確認します。JSONのキーの見た目や整形だけの差は、値・型・pathの差と分けて扱います。

orders[0].items[1].qty: 3 → 4
parents: 2 / children: 3 / total qty: 7
orders[0].items は A, B の順

壊れた関係は自動修復しない

orphan.csv の親ID 999 は存在しないため、親を勝手に作らず確認へ止めます。duplicate-parent.csv の注文ID 001 重複も先頭行を採用しません。ordinal欠損、型不明の空欄、親子対応の不一致は、出力を保存せず対象版を確認します。

原本とCSVはこのガイドのfixtureです。実務では原本を不変で保管し、変換前後を独立に比較してください。

既存のJSON/CSV整形で確認する

  1. 原本JSON、親CSV、子CSV、mappingを保存する。
  2. 既存のJSON/CSV整形で親子表を割り当て、親IDとordinalを確認する。
  3. 編集済み子CSVを読み込み、Bのqtyだけ4へ変更する。
  4. 保存前に件数・順番・型・null・孤児・重複を検算する。
  5. 完了JSONを expected.json とpath単位で比較し、入力を外部へ送信しない。