JSONマージ
複数のJSONオブジェクトを1つにマージ
入力(JSONオブジェクトの配列)
マージ出力
JSONマージとは?
JSONのマージとは、2つ以上のオブジェクトを1つに結合することです。シャローマージでは、後のオブジェクトが両方に存在するキーについて前のオブジェクトを上書きします。ディープマージでは、ネストされたオブジェクトは置き換えではなく再帰的にマージされます。設定ファイルのマージ、APIレスポンスの結合、デフォルトとオーバーライドからのオブジェクト構築に便利です。
このツールはJSONオブジェクトの配列を期待します。シャローまたはディープモードで順番にマージします。結果は単一のオブジェクトです。処理はブラウザ内で行われます。
このツールの使い方
JSON配列を入力
JSONオブジェクトの配列を貼り付けます。例:[{"a": 1}, {"b": 2}, {"a": 3}]。順序が重要で、後のオブジェクトが競合するキーで前のオブジェクトを上書きします。ディープまたはシャローでマージ動作を選択します。
出力を確認
右のパネルにマージされたオブジェクトが表示されます。シャローモードでは、{"a": 1, "b": 2}と{"a": 3}のマージ結果は{"a": 3, "b": 2}です。ディープモードでは、ネストされたオブジェクトが再帰的にマージされます。
コピーまたはダウンロード
<strong>コピー</strong>または<strong>ダウンロード</strong>で結果を取得します。フォーマットにはJSONフォーマッターを、検証にはJSONバリデーターを使用してください。
JSONマージが役立つ場面
設定ファイルのマージは一般的なユースケースです。<code>default.json</code>と<code>production.json</code>があり、productionが必要なキーのみを上書きするようにマージしたい場合。ディープマージはネストされたデフォルトを再帰的に結合します。複数ソースのAPIレスポンスや、ベーステンプレートと環境固有のオーバーライドからオブジェクトを構築する場合、マージで単一の結合オブジェクトが得られます。JSONフォーマッターで結果を読みやすくフォーマットできます。
JSONマージの例
2つの加入者設定オブジェクトをマージする例です。後のオブジェクトが競合するキーで前のオブジェクトを上書きします。
例:加入者設定のマージ
入力(マージするオブジェクトの配列):
マージ出力:
シャロー vs ディープマージ
シャローマージ:両方のオブジェクトにキーがある場合、後のオブジェクトの値が前のオブジェクトを完全に置き換えます。ネストされたオブジェクトはマージされず、置き換えられます。ディープマージ:ネストされたオブジェクトは再帰的にマージされます。したがって{"a": {"b": 1}}と{"a": {"c": 2}}のマージは、ディープモードで{"a": {"b": 1, "c": 2}}、シャローモードで{"a": {"c": 2}}になります。JavaScriptのObject.assignはシャローマージを行います。Lodash mergeなどのライブラリはディープマージを行います。
JSON仕様はオブジェクトをキーと値のペアの順序付けられていないコレクションとして定義しています。マージの順序が重要で、後の値が前の値を上書きします。PostmanやfetchのAPIレスポンスでは、設定のマージやデフォルトとオーバーライドの結合が一般的です。正式な標準はRFC 8259です。MDNのJSONガイドでパースとシリアライズを解説しています。
よくある質問
2つの別々のオブジェクトがある場合は?
配列でラップしてください:[{"a": 1}, {"b": 2}]。ツールはオブジェクトの配列を期待します。
配列はどのように扱われますか?
ほとんどのマージ実装では、配列は連結ではなく置き換えられます。オブジェクトAが"items": [1, 2]、オブジェクトBが"items": [3]の場合、結果は通常"items": [3]になります。ツールの出力で確認してください。
データはどこかに送信されますか?
いいえ。マージはブラウザ内で行われます。
設定ファイルをマージできますか?
はい。各設定を配列内のオブジェクトとして貼り付け、デフォルトを最初に、オーバーライドを最後に配置してください。ネストされた設定構造にはディープマージが通常適しています。
同じオブジェクト内の重複キーは?
JSONオブジェクトは重複キーを持てません。ある場合、パーサーは1つだけを保持します。まずJSONバリデーターで検証してください。
関連ツール
JSON構文はjson.orgとRFC 8259を参照してください。JavaScriptでのマージはMDN Object.assignとスプレッド構文を参照してください。Lodashのディープマージはmerge関数を参照してください。MDNのJSON概要、jq、Postmanも参照してください。