ForHosting KIT · データ変換・整形

JSONオブジェクトの差分を比較して変更キーを検出

テキスト差分では、インデントやキー順、書式の違いが混ざり、小さなJSON更新でも大量の変更に見えることがあります。本ツールは解析済みの値を比較し、追加・削除・変更を分類します。共通する入れ子オブジェクトをたどり、各結果に一意のJSON Pointerパスを付けます。配列は順序付きの値として全体を比較します。処理は決定的でネットワークを使用せず、最上位の配列、プリミティブ値、nullは入力エラーとして扱います。

● Beta無料・ブラウザ内で実行
ご利用方法 ウェブAPIメールTelegramアプリ 近日

処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。

構造的なJSON差分の読み方

結果は、追加、削除、変更の3つの一覧に分かれます。追加項目は更新後だけに存在し、削除項目は更新前だけに存在します。変更項目には変更前後の値が含まれます。各項目のパスはスラッシュで始まるJSON Pointerです。たとえば/profile/nameはprofile内のnameを表します。キー内のスラッシュは~1、チルダは~0に変換されるため、入れ子との混同がありません。キーを並べ替えて走査するので、同じ入力から常に安定した結果を得られます。countsには分類別の件数と合計が示されます。3つの一覧がすべて空なら、元のインデントやキー順が違っていても構造的には同一です。

入れ子オブジェクトと配列の扱い

同じキーの値が両側ともオブジェクトなら、実際に異なるプロパティまで再帰的に比較します。profile.activeだけが変わった場合、返されるパスは/profile/activeです。キー全体が片側にしかない場合は、子要素ごとに展開せず、その完全な値とともに1件として記録します。配列は順序付きJSON値として全体を比較するため、要素の追加、削除、並べ替え、編集はいずれも配列プロパティの変更になります。プリミティブ値とnullは直接比較し、型の変化も変更です。最上位だけは条件が厳しく、beforeとafterの両方がnullではないJSONオブジェクトである必要があります。

レビューと自動処理での活用

元のオブジェクトをbefore、提案するオブジェクトをafterに指定してください。ブラウザーツールはローカルで動作し、APIリクエストは$0.002で同じ決定的な構造を返します。保護された設定の削除時にデプロイを止める、許可済みパスだけが変わったことを検証する、監査用に簡潔な差分を保存するといった用途に利用できます。書式やキー順で誤検出しないため、設定、Webhook、機能フラグ、権限、正規化済み応答に適しています。パスはJSON Pointerとして解釈し、変更分類も確認してください。配列では完全な前後値が返るため、必要に応じて業務固有の規則を適用できます。不正な最上位入力には、空の差分ではなく明確なエラーを返します。

設定リリースの確認

空白やキー順のノイズを除き、稼働中と候補の設定にある構造変更だけを確認します。

Webhook変更の監査

正規化した2例の間で追加、削除、変更された入れ子フィールドを記録します。

承認済み設定の保護

CIでパスを検査し、保護対象の設定が変更された場合にデプロイを停止します。

結果のパス形式は何ですか?

RFC 6901形式のJSON Pointerです。キー内のスラッシュは~1、チルダは~0になります。

キー順の違いは変更になりますか?

いいえ。シリアライズ順ではなくキーと値を比較するため、順序だけでは差分になりません。

配列はどのように比較しますか?

順序付きの値として全体を比較します。編集、追加、削除、並べ替えのいずれでも変更になります。

最上位の配列同士を比較できますか?

できません。beforeとafterはnullではないJSONオブジェクトでなければなりません。

APIリクエストの料金はいくらですか?

Webツールはローカルで無料実行できます。APIは公開基本料金$0.002を1回ごとに適用します。

このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。

POSThttps://api.kit.forhosting.com/data/diff-json-objects

Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。

curl -X POST https://api.kit.forhosting.com/data/diff-json-objects \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"before":{"name":"Ada","profile":{"active":true,"score":8},"roles":["reader"]},"after":{"name":"Ada","profile":{"active":false,"score":8,"city":"London"},"roles":["reader","editor"]}}'
{
  "before": {
    "name": "Ada",
    "profile": {
      "active": true,
      "score": 8
    },
    "roles": [
      "reader"
    ]
  },
  "after": {
    "name": "Ada",
    "profile": {
      "active": false,
      "score": 8,
      "city": "London"
    },
    "roles": [
      "reader",
      "editor"
    ]
  }
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "data.diff_json_objects",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。

1リクエストあたり$0.002

単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。

max_mb25
HTTPコード意味
401unauthorizedAPIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。
402insufficient_balance残高が不足しています。チャージ後に再度お試しください。
404unknown_type指定されたタスクタイプは存在しません。タイプ名を確認してください。
429rate_limitedリクエストが多すぎます。しばらく待ってから再度お試しください。

KITの完全なドキュメントを見る →