JSONフラット化

区切り文字:
最大深度:(0=unlimited)

ネストしたJSONをドット区切りのキーに変換し、必要に応じて元の構造へ復元できます。すべてブラウザ内で安全に処理します。

関連おすすめ

ユースケース

  • MongoDBのクエリと更新: ネストしたフィールドをドット記法に変換し、そのまま検索や更新条件に使う
  • CSVやExcelへの出力: 多層JSONを単層化して、列単位で見やすく表形式へ変換する
  • Elasticsearchの投入前整形: ネストが深いドキュメントを検索しやすいフラット構造へ整える
  • APIデバッグ: リクエストやレスポンスのフィールド差分を単層キーで比較しやすくする
  • 設定と環境変数の前処理: package.json や settings.json の深い設定を展開して扱いやすくする

使い方

  1. 左側の入力欄にJSONを貼り付けるか、ローカルの .json ファイルをアップロードします
  2. フラット化またはアンフラット化を選び、区切り文字、配列処理、最大深度を設定します
  3. 右側の出力欄で結果とキー数、最大深度を確認します
  4. 必要に応じて結果をコピーするか、.json ファイルとしてダウンロードします

特徴

  • 双方向変換: フラット化とアンフラット化の両方に対応し、ネスト構造と単層構造を行き来できます
  • カスタム区切り文字: ドット、アンダースコア、スラッシュ、任意の文字で下流システムに合わせて調整できます
  • 配列処理を選択可能: インデックス付きキーへ展開するか、配列全体を1つの値として保持するか選べます
  • 最大深度の制限: 深すぎるネストを途中で止めて、長すぎるキーの生成を防げます
  • ローカル処理で安全: 解析と変換はブラウザ内のみで完結し、JSONはサーバーへ送信されません
  • 入力から出力まで効率化: .jsonアップロード、サンプル読込、コピー、ダウンロード、キー数表示に対応します

コード例

JavaScriptでJSONをフラット化する

javascript
function 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をフラット化する

python
def 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で処理してください。