ネストしたオブジェクトや配列は構造を表現するのに適しているが、スプレッドシートやログ、翻訳ファイルのようにフラットなキーと値のペアが必要な場面では扱いにくい。Flatten(平坦化)はこのギャップを解消する。
仕組み
ネストした各フィールドは1行になり、キーは値までの完全なパス(ドットや角かっこのインデックスで表記)、値はそのままの値になる。{"user": {"address": {"city": "京都"}}}はuser.address.city → "京都"というペアになる。配列の要素はパスの中でインデックスを受け取る。例えばitems[0].name。
実際に使われる場面: 翻訳ファイル(i18n)
ドット表記のフラットなキーは、i18nextなどのライブラリにおける翻訳ファイルの標準的な形式だ — ネストしたJSONツリーではなくsettings.profile.titleという形になる。ローカライズ作業では、翻訳担当者やスプレッドシートベースのワークフローがこのフラットな形式を前提にしていることが多く、ネストした言語ファイルを翻訳者に渡す前にflattenするのはよくある最初のステップだ。
実務でどう使われるか
- APIから取得したネストデータをスプレッドシートやフラットなデータベーステーブルにインポートする。
- 複雑な2つのオブジェクトを行単位で比較しやすくする。
- 深くネストしたJSONの中から特定の値を、パス全体を一目で見て素早く見つける。
逆の操作: unflatten
フラットなリストからネスト構造を復元するには、各キーをパスのセグメントに分解し(ドットと角かっこのインデックスで区切る)、ネストしたオブジェクトや配列を順に組み立てていく。パスが2通りに解釈できる場合は曖昧になる — データの中に文字どおりのキー"a.b"とネストしたパスa.bが同時に存在すると、unflattenはどちらの意図か判断できず、黙って上書きする代わりに競合として報告する。