コンテンツへスキップ

JSON ディープマージ

ベース文書とオーバーレイ文書を貼り付け、配列の戦略と競合ルールを選ぶと、マージ結果と操作ログを確認できます。

ブラウザ内でローカルに実行
1ベース JSON2ディープマージ3マージ後の JSON

ベース JSON
オーバーレイ JSON

競合ルールと配列戦略を指定して 2 つの JSON 文書をマージする方法

このツールはオーバーレイの JSON 文書をベース文書にマージし、結果を整形済み JSON として出力します。オブジェクトはキーごとに再帰的に統合され、オーバーレイにしかないキーは追加され、両方にあるキーは競合ルールに従います。オーバーレイ値を使用する、ベース値を保持する、またはパスを示すエラーで停止する、のいずれかです。

配列は選択した戦略に従います。置換(オーバーレイの配列を採用)、連結(ベースの要素の後にオーバーレイの要素を追加)、一意の値を連結(重複を除いて同じ順序で追加)、キーでオブジェクトをマージ(キーフィールドの値が同じ要素を統合し、新しい要素は追加)。処理はすべてブラウザ内で行われ、変更はマージ操作にパスごとに記録されます。

  1. ベース文書をベース JSON に、オーバーレイを JSON オーバーレイに貼り付けるか、例を読み込むで id による配列マージの例を開始します。
  2. 配列戦略を選びます。配列を置換、配列を連結、一意の値を連結、キーでオブジェクトをマージのいずれかです。キー戦略では配列オブジェクトキーの入力欄が現れ、既定値は id です。
  3. スカラー競合を選びます。オーバーレイ値を使用(既定)、ベース値を保持、競合時に停止のいずれかです。競合時に停止は最初の競合パスを報告し、結果を生成しません。
  4. JSON をマージを押します。マージ後の JSON に結果が表示され、マージ操作にすべての変更がパスごとに並びます。追加、オーバーレイ値を使用、ベース値を保持、配列を置換、配列を連結、一意の値を連結、キーでオブジェクトをマージのいずれかとして記録されます。指標には操作数、出力サイズ(バイト)、結果の型が出ます。
  5. コピーまたはダウンロードで結果を voritools-merged.json として取得し、クリアで入力・結果・ログ・指標を空にします。JSON が正しくない場合やキーなしでキー戦略を実行した場合は、エラー表示の前に関連パネルが消去されるため、古い結果が誤ってコピーされることはありません。

各パネルの役割、配列戦略の違い、このツールが受け付けない操作

オブジェクト、スカラー値、競合

オブジェクトは再帰的にマージされ、独自キーは名前で比較されます。オーバーレイにしかないキーは追加され、追加操作としてログに残ります。__proto__、constructor、prototype といった名前はオーバーレイ側で拒否されるため、細工した文書がオブジェクトのプロトタイプに到達することはありません。異なるスカラー値は選択したルールで処理され、オーバーレイ値、ベース値、または 競合が発生しました: $.service.retries のようなエラーになります。

型が異なる値は変換されません。一方が数値で他方が同じキーに配列を持つ場合は競合として扱われ、同じルールに従います。同一の値はそのまま残りログにも出ず、完全に同じ 2 つの文書は $: 変更なし という 1 件の記録で終わります。

配列戦略の実際の動き

配列を置換はオーバーレイの配列をそのまま採用し、ベースの要素数が多くても維持しません。配列を連結はベースの要素の後にオーバーレイの要素を重複を除かずに追加し、一意の値を連結は JSON 表現で重複を判定して取り除きます。たとえば ["a","b"] と ["c","a"] は ["a","b","c"] になります。

キーでオブジェクトをマージはキーフィールドの値で要素を突き合わせます。{id: 1} のオーバーレイ要素は追加されず、ベースの id 1 の要素に統合されます。比較は文字列として行われるため 1 と "1" は同じ識別子です。キーを持たない要素やオブジェクト以外の要素はそのまま追加されます。キー名の前後の空白は取り除かれ、フィールドの余分な空白は無視されます。

結果の読み方、プライバシー、制限

結果はマージが生成した順序のままの JSON です。ベースのキーが先に、追加分が後に並びます。マージ操作のログは確認の最短経路で、各項目が変更されたパスを示し、キー付き配列では $.users[id=1].role の形式を使います。コピーはマージ結果をクリップボードに入れ、ダウンロードは voritools-merged.json として保存します。

マージは完全にブラウザ内で実行され、アップロードもネットワーク要求もありません。社内設定やテストデータにも安全に使えます。競合を自動で解決したり型を変換したりはせず、あいまいな場合は選択したルールに従い、行った内容を記録します。

最近使ったツール: