JSONフラット化
ネストしたJSONをドット区切りのキーに変換し、必要に応じて元の構造へ復元できます。すべてブラウザ内で安全に処理します。
関連おすすめ
ユースケース
- MongoDBのクエリと更新: ネストしたフィールドをドット記法に変換し、そのまま検索や更新条件に使う
- CSVやExcelへの出力: 多層JSONを単層化して、列単位で見やすく表形式へ変換する
- Elasticsearchの投入前整形: ネストが深いドキュメントを検索しやすいフラット構造へ整える
- APIデバッグ: リクエストやレスポンスのフィールド差分を単層キーで比較しやすくする
- 設定と環境変数の前処理: package.json や settings.json の深い設定を展開して扱いやすくする
使い方
- 左側の入力欄にJSONを貼り付けるか、ローカルの .json ファイルをアップロードします
- フラット化またはアンフラット化を選び、区切り文字、配列処理、最大深度を設定します
- 右側の出力欄で結果とキー数、最大深度を確認します
- 必要に応じて結果をコピーするか、.json ファイルとしてダウンロードします
特徴
- 双方向変換: フラット化とアンフラット化の両方に対応し、ネスト構造と単層構造を行き来できます
- カスタム区切り文字: ドット、アンダースコア、スラッシュ、任意の文字で下流システムに合わせて調整できます
- 配列処理を選択可能: インデックス付きキーへ展開するか、配列全体を1つの値として保持するか選べます
- 最大深度の制限: 深すぎるネストを途中で止めて、長すぎるキーの生成を防げます
- ローカル処理で安全: 解析と変換はブラウザ内のみで完結し、JSONはサーバーへ送信されません
- 入力から出力まで効率化: .jsonアップロード、サンプル読込、コピー、ダウンロード、キー数表示に対応します
コード例
JavaScriptでJSONをフラット化する
javascriptfunction flatten(obj, prefix = '', sep = '.') {
return Object.entries(obj).reduce((acc, [key, value]) => {
const newKey = prefix ? `${prefix}${sep}${key}` : key;
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
Object.assign(acc, flatten(value, newKey, sep));
} else {
acc[newKey] = value;
}
return acc;
}, {});
}
flatten({ user: { name: 'Alice', contact: { email: 'a@x.com' } } });
// => { 'user.name': 'Alice', 'user.contact.email': 'a@x.com' }PythonでJSONをフラット化する
pythondef flatten(obj, parent_key='', sep='.'):
items = {}
for key, value in obj.items():
new_key = f"{parent_key}{sep}{key}" if parent_key else key
if isinstance(value, dict):
items.update(flatten(value, new_key, sep))
else:
items[new_key] = value
return items
import json
print(json.dumps(flatten({'user': {'name': 'Alice'}}), indent=2))
# => {"user.name": "Alice"}コマンドラインでjqを使ってフラット化する
bash# ネストしたJSONをドット区切りのフラット構造へ変換
jq '[paths(scalars) as $p | {"key": $p | join("."), "value": getpath($p)}] | from_entries' data.json
# フラットJSONをネスト構造へ戻す
# jq 1.7+ と外部フィルタの組み合わせ、または本ツールのアンフラット化モードを利用よくある質問
JSONフラット化とは何ですか?どんなときに使いますか?
JSONフラット化は、ネストしたオブジェクトや配列を単層のキーと値に変換する処理です。MongoDBのドットクエリ、CSVエクスポート、Elasticsearchインデックス、環境変数化、APIフィールド比較などで役立ちます。
フラット化したJSONを元のネスト構造に戻せますか?
はい。区切り文字が一致していれば、フラットなキーを元のオブジェクトや配列へほぼそのまま復元できます。連続した数値キーは自動で配列として扱われます。
区切り文字は変更できますか?配列はどう処理されますか?
変更できます。ドット、アンダースコア、スラッシュ、ダブルアンダースコアなどを使えます。配列は `items.0` のように展開するか、配列全体を保持するかを選べます。
オンライン処理でもデータは安全ですか?
安全です。すべての解析と変換はローカルのブラウザ内で実行されるため、JSONデータがサーバーへアップロードされることはありません。
MongoDBでJSONフラット化はどう使いますか?
MongoDBはネストフィールドの参照にドット記法を使います。このツールで変換したキーは、そのまま `find`、`update`、集約パイプラインのフィールド指定に活用できます。
フラット化したJSONをCSVやExcelへ出力できますか?
できます。単層のキーと値になるため、JSONをCSVへ変換したり、ExcelやPandasに列名付きで読み込んだりしやすくなります。
キー名にドットや区切り文字が含まれていると問題になりますか?
問題になることがあります。元のキー名に区切り文字が含まれると、復元時に階層として誤解される可能性があります。別の区切り文字へ変更するか、事前にキー名をエスケープしてください。
大きなJSONでも処理できますか?
一般的なAPIレスポンスや設定ファイルなら問題ありません。非常に大きいJSONではブラウザのメモリを多く使うため、必要に応じて分割するか `jq` などのローカルCLIを使うのがおすすめです。
トラブルシューティング
入力が有効なJSONとして認識されない
引用符不足、余分なカンマ、閉じ忘れた括弧、True や False などJSONではない書き方が原因です。先にJSONフォーマットツールで構文を確認してください。
アンフラット化すると階層が崩れる
元のキー名に区切り文字が含まれている可能性があります。区切り文字を変更するか、変換前にキー名をエスケープしてください。
配列を展開したらCSVで列や行が増えすぎる
配列をインデックス付きで展開すると、列数や行数が大きく増えることがあります。表形式を優先するなら、配列全体を保持する設定を使ってください。
大きなJSONでブラウザが重くなる
巨大なJSONはブラウザメモリを多く消費します。ファイルを分割するか、`jq` や Python スクリプトなどのローカルCLIで処理してください。
- JSON 圧縮
- CSV to JSON
- JSON から CSV
- JSON Diff
- JSON Escape / Unescape
- JSONフラット化
- JSON フォーマッター
- JSON 生成
- JSONPath オンラインクエリ
- JSON マージ
- JSON 修復
- JSON Schema バリデーター
- JSONソート
- JSON Stringify
- JSONをHTMLに変換
- JSONからJavaへ
- JSON から Markdown
- JSON を SQL に変換
- JSON から TOML へ変換
- JSONをTypeScriptに変換
- XML を JSON に変換
- JSONをXMLへ変換
- YAML を JSON に変換
- JSON → YAML 変換
- JSON から Go へ
- JSON から Rust
- JSON から Swift
- JSON から C#
- JSON から C++
- JSON を PHP に
- JSON から Python