JSON フラットン化 / アンフラットン化
ネストされた JSON オブジェクトをドット記法キー(例:user.address.city)にフラットン化し、その逆に変換します。セパレーターと配列処理が構成可能です。
Flattened Output
12 keys{
"user.id": 42,
"user.name": "Alice",
"user.roles.0": "admin",
"user.roles.1": "editor",
"user.address.city": "Berlin",
"user.address.country": "Germany",
"user.address.zip": "10115",
"user.preferences.theme": "dark",
"user.preferences.notifications.email": true,
"user.preferences.notifications.sms": false,
"meta.version": "1.0",
"meta.created": "2024-01-15"
}JSON フラットン化 / アンフラットン化の使い方
- 1ネストされた JSON オブジェクトを入力に貼り付けてください。
- 2ドット記法キーに変換するには「Flatten」を選択し、その逆に変換するには「Unflatten」を選択します。
- 3セパレーター文字を構成して結果をコピーしてください。
Zenovayアナリティクス
関連ツール
よくある質問
JSON フラット化とは何で、いつ役立つのか?▾
JSON フラット化は、ネストされたオブジェクトを単一レベルのオブジェクトに変換し、ネストされたキーをセパレータ(通常はドット)で結合します。例:{"user": {"name": "Alice", "address": {"city": "Berlin"}}} → {"user.name": "Alice", "user.address.city": "Berlin"}。ユースケース:データベースカラム保存用のフラット化(NoSQL から SQL への移行)、深くネストされた API レスポンスの簡素化、表形式データを期待する機械学習パイプラインへのフィード、Elasticsearch ドキュメントインデックス、フラットプロパティを持つアナリティクスイベントの送信です。
配列のフラット化はどのように機能するか?▾
配列はインデックスをキーの一部として使用してフラット化されます。例:{"tags": ["js", "ts"]} → ドットセパレータで {"tags.0": "js", "tags.1": "ts"}、またはブラケット記号で {"tags[0]": "js", "tags[1]": "ts"}。ネストされた配列:{"matrix": [[1,2],[3,4]]} → {"matrix.0.0": 1, "matrix.0.1": 2, "matrix.1.0": 3, "matrix.1.1": 4}。アンフラット化時に配列を再構築するには、どのキーが数値インデックスであるかを知る必要があります。一部のツールはアンフラット化中に配列構造を保持し、他のツールはオブジェクトに変換します。
フラット化されたキーに一般的に使用されるセパレータは何か?▾
ドット(.):最も一般的で直感的ですが、ドットを含むキーと競合します。アンダースコア(_):ドットとの競合を避け、一部のデータベースカラム命名規則で使用されます。ダブルアンダースコア(__):シングルアンダースコアとの競合を避け、Django 環境変数と Helm チャート値で使用されます。スラッシュ(/):JSON ポインタ(RFC 6901)で使用されます — "/user/address/city"。コロン(:):一部のコンフィグシステムで使用されます。ベストプラクティス:既存のキー名に現れないセパレータを選択してください。キーがパッケージ名またはドメイン名を含む可能性がある場合はドットを避けてください。
JSON ポインタ(RFC 6901)とは何か?▾
JSON ポインタは IETF 標準(RFC 6901)で、JSON ドキュメント内の特定の値を参照するためのものです。形式:/key/subkey/index。ルートドキュメント:""。配列の最初の要素:"/0"。ネストされた値:"/user/address/city"。特殊文字:"~0" は "~" を表し、"~1" は "/" を表します。使用場所:JSON パッチ(RFC 6902)の部分的な更新、JSON スキーマの $ref、OpenAPI パス参照。例:{"op": "replace", "path": "/user/address/city", "value": "London"} の PATCH は、ドキュメント全体を置換することなくネストされた値を変更します。
JavaScript でライブラリなしで JSON をフラット化するにはどうするか?▾
function flatten(obj, prefix = "", sep = ".") { return Object.entries(obj).reduce((acc, [key, val]) => { const newKey = prefix ? prefix + sep + key : key; if (val && typeof val === "object" && !Array.isArray(val)) { Object.assign(acc, flatten(val, newKey, sep)); } else if (Array.isArray(val)) { val.forEach((item, i) => { if (item && typeof item === "object") { Object.assign(acc, flatten(item, newKey + sep + i, sep)); } else { acc[newKey + sep + i] = item; } }); } else { acc[newKey] = val; } return acc; }, {}); }。逆(アンフラット化)の場合、各キーをセパレータで分割し、ネストされた構造を再構築します。