JSON Diff (Bandingkan)
Bandingkan dua file JSON langsung di browser Anda. Sorotan side-by-side, output RFC 6902 JSON Patch, abaikan field seperti timestamp dan ID. 100% privat, tanpa upload.
Opsi Lanjutan
Apa itu JSON Diff?
JSON Diff adalah perbandingan struktural dari dua dokumen JSON yang menghormati model data JSON — key tidak berurutan, tipe bersifat strict, dan array dapat berurutan atau berdasarkan key. Tidak seperti text diff (yang membandingkan baris dan melaporkan pengurutan ulang key atau whitespace sebagai perbedaan), JSON diff menghasilkan hasil yang bermakna secara semantis.
Bentuk yang dapat dibaca mesin secara kanonik adalah JSON Patch (RFC 6902), array ops terurut (add, remove, replace, move, copy, test) yang mengubah satu dokumen menjadi dokumen lainnya. Path menggunakan JSON Pointer (RFC 6901). Terkait erat: JSON Merge Patch (RFC 7396) — lebih sederhana tetapi tidak dapat membedakan 'hapus key' dari 'set key ke null'. Tool ini menghasilkan RFC 6902.
Kesamaan mendalam pada JSON di JavaScript lebih sulit dari yang terlihat. JSON.stringify(a) === JSON.stringify(b) gagal pada pengurutan ulang key, menyesatkan pada -0 vs 0 (keduanya di-stringify menjadi "0"). Diff yang benar harus menelusuri kedua tree secara paralel menggunakan key-set union, membedakan null dari missing via operator 'in', dan memutuskan apa arti 'sama' untuk angka (Object.is secara default, epsilon untuk tolerance).
Tool ini berjalan sepenuhnya di browser Anda. Input tidak pernah meninggalkan mesin Anda. Aman untuk API response, schema internal, dan config yang bersifat proprietary.
Bekerja dengan tool JSON terkait? Format dengan JSON Formatter; konversi dengan JSON to YAML dan YAML to JSON.
// Two JSON documents that look different but are semantically equal
const a = '{"a":1,"b":2}';
const b = '{"b":2,"a":1}';
// Naive comparison — wrong
JSON.stringify(JSON.parse(a)) === JSON.stringify(JSON.parse(b));
// → false (key order differs)
// JSON Diff (this tool) — correct: key order is irrelevant
// → 0 differences
// JSON Patch (RFC 6902) for { "a": 1 } → { "a": 2 }
// [{ "op": "replace", "path": "/a", "value": 2 }] Fitur Utama
Side-by-Side + JSON Patch
Dua tampilan dari satu diff: sorotan visual untuk review, RFC 6902 patch untuk otomasi.
Abaikan Field yang Berisik
Preset satu klik menghapus /createdAt, /updatedAt, /*Id, /*At, requestId, traceId. Pola Extended JSON Pointer kustom didukung.
Cocokkan Array by Key
Bandingkan array of objects berdasarkan field id daripada berdasarkan index — untuk K8s envs, entri package-lock, atau daftar yang secara logis tidak berurutan.
Type-Strict secara Default
1 ≠ "1". null ≠ missing. Tangkap drift serialisasi backend begitu muncul dalam test fixture.
100% Berbasis Browser
Input tidak pernah meninggalkan mesin Anda. Tidak ada upload, tidak ada penyimpanan JSON ke localStorage, tidak ada analitik pada yang Anda tempelkan.
Bagikan Link, Bukan Data
Share Link hanya menulis konfigurasi Anda ke URL. Input JSON Anda tetap lokal.
Contoh
Regresi API Response
{"user":{"id":1,"name":"Ada","createdAt":"2024-01-01"}} {"user":{"id":1,"name":"Ada Lovelace","createdAt":"2024-02-02"}} Dua perubahan (name + createdAt). Tambahkan /user/createdAt ke Ignore paths agar hanya perubahan name yang tersisa.
Audit Config File (Urutan Key)
{"a":1,"b":2,"c":3} {"c":3,"a":1,"b":2} Data sama, urutan key berbeda. JSON Diff memperlakukan urutan key sebagai tidak relevan secara semantis — diff kosong.
Array of Objects (Match by Key)
[{"id":1,"qty":3},{"id":2,"qty":5}] [{"id":2,"qty":5},{"id":1,"qty":4}] Ubah Array mode ke 'Match by key' dengan key=id. Tanpa alignment setiap elemen tampak berubah; dengan alignment hanya qty pada id=1 yang berubah.
Output JSON Patch (RFC 6902)
{"items":[{"id":1,"price":29.99}]} {"items":[{"id":1,"price":24.99}]} Beralih ke tab JSON Patch untuk mendapatkan [{"op":"replace","path":"/items/0/price","value":24.99}] yang dapat diterapkan dengan fast-json-patch.
Cara Penggunaan
- 1
Tempelkan kedua dokumen JSON
Tempelkan JSON asli (kiri) dan yang dimodifikasi (kanan). Live diff dirender saat Anda mengetik; input besar (>200 KB) beralih ke tombol Diff manual.
- 2
Filter kebisingan
Klik preset (Timestamps / IDs / Trace) atau tempelkan pola Extended JSON Pointer ke Ignore paths untuk menghapus field yang tidak relevan.
- 3
Pilih tampilan yang Anda butuhkan
Side-by-Side untuk review oleh manusia, JSON Patch (RFC 6902) untuk ops yang dapat diterapkan oleh mesin. Gunakan Share Link untuk mengirim konfigurasi ke rekan kerja.
Jebakan Umum dalam Diff
Kebisingan Urutan Key (Gejala Text Diff)
Jika tool diff Anda melaporkan {"a":1,"b":2} vs {"b":2,"a":1} sebagai berbeda, itu melakukan line diff, bukan JSON diff. Key JSON tidak berurutan — tool ini mengabaikan urutan key secara otomatis.
diff a.json b.json # text diff: 'everything changed'
JSON Diff (this tool): 0 differences
Kebingungan Null vs Missing
{"a":null} dan {} tidak sama. Memperlakukan keduanya sebagai sama menyembunyikan bug backend yang nyata.
{"a": null} == {} # collapsed by some tools {"a": null} ≠ {} # type-strict diff Urutan Array Tanpa Key Alignment
[{id:1},{id:2}] vs [{id:2},{id:1}] bukan '2 perubahan' untuk set logis. Sequential melaporkannya demikian; beralih ke Match by key.
Sequential diff: 4 modified
Match by key (id): 0 differences
Drift Tipe (Number vs String)
Backend terkadang mem-serialisasi ID secara tidak konsisten — 42 vs "42". Tool ini menandainya sebagai modifikasi 'type' sehingga Anda dapat menemukan drift lebih awal.
{"id": 42} vs {"id": "42"} # serialization bug Diff reports 'modified (type)' with both values
Presisi Floating-Point
0.1 + 0.2 !== 0.3 dalam IEEE 754. Dengan tolerance=0 (default), ini akan ditandai. Set tolerance ke 1e-9 jika Anda menginginkan kesetaraan numerik.
tolerance=0: 0.30000000000000004 ≠ 0.3
tolerance=1e-9: equal
Kebisingan Timestamp & UUID
createdAt, updatedAt, requestId, traceId berubah setiap request. Gunakan preset Ignore paths untuk menghapusnya.
Diff: 47 modifications (45 are timestamps)
Add /createdAt, /updatedAt, /requestId to Ignore paths → 2 real changes
Kasus Penggunaan Umum
- Regresi API Response
- Bandingkan response staging vs produksi; abaikan timestamp dan request ID untuk menampilkan hanya perubahan payload yang bermakna.
- Kegagalan Snapshot Test CI
- Tempelkan actual vs expected dari snapshot Jest/Vitest yang gagal. Filter kebisingan dan temukan perubahan nyata dalam hitungan detik.
- Konflik package-lock / yarn.lock
- Selesaikan merge conflict dengan menyelaraskan dependensi berdasarkan nama; urutan key dan field yang tidak relevan tidak lagi menjadi kebisingan.
- Audit K8s / Helm Values
- Cocokkan envs, volumeMounts, dan ports berdasarkan nama. Tangkap perubahan urutan yang tidak disengaja vs pengeditan konfigurasi nyata.
- Cakupan Terjemahan i18n
- Diff en.json terhadap zh.json secara struktural untuk menemukan key terjemahan yang hilang atau berlebih tanpa kebisingan nilai.
- Review Plan Terraform / CDK
- Bandingkan output plan antar run; numeric tolerance menangani aritmetika floating-point, ignore paths menghapus ARN dan timestamp.
Detail Teknis
- Output Patch Sesuai RFC 6902
- Menghasilkan ops JSON Patch yang valid (add/remove/replace) dengan path RFC 6901. Diverifikasi terhadap fast-json-patch@3.x dan package npm rfc6902.
- Traversal Iteratif
- Traversal dengan explicit-stack (tanpa rekursi) dibatasi pada 100.000 node dan kedalaman 64 untuk mencegah stack overflow pada input yang berpotensi menyerang.
- Kesamaan Numerik Object.is
- Numeric tolerance default adalah 0 — menggunakan Object.is sehingga -0 dan +0 dibedakan. Set tolerance > 0 untuk kesamaan berbasis epsilon.
Praktik Terbaik
- Filter Sebelum Review
- Tambahkan Ignore paths terlebih dahulu (timestamp, ID, trace field), lalu baca diff. Mereview diff yang berisik melatih mata untuk melewatkan — dan melewatkan — perubahan nyata.
- Match-by-Key untuk Set Logis
- Jika array Anda merepresentasikan set yang tidak berurutan (envs, users, dependencies), gunakan Match by key. Sequential diff pada set logis hampir selalu salah.
- Bagikan Link, Bukan Input
- Gunakan Share Link untuk mengirim konfigurasi filter ke kolega — jangan pernah menempelkan JSON sensitif ke dokumen bersama. URL hanya berisi konfigurasi.
Pertanyaan yang Sering Diajukan
Mengapa diff saya menampilkan semua field berubah padahal saya hanya mengubah satu field?
Bagaimana cara mengabaikan timestamp dan ID dalam JSON diff?
Apa perbedaan antara JSON Patch dan visual diff?
Apakah JSON diff memperlakukan null dan key yang tidak ada sebagai sama?
Bagaimana array dibandingkan — by index atau by key?
Bisakah saya mengekspor diff sebagai RFC 6902 JSON Patch?
Apakah JSON Patch sama dengan JSON Merge Patch (RFC 7396)?
Bagaimana cara membandingkan dua file JSON besar (>10 MB)?
Apakah tool ini mengirim JSON saya ke server?
Mengapa 42 berbeda dari "42" dalam diff?
Bisakah saya membandingkan JSON dengan komentar (JSONC) atau trailing comma?
Bagaimana cara membandingkan array bersarang dari objek berdasarkan key seperti id?
Apakah diff menangani presisi floating-point (0.1 + 0.2)?
Alat Terkait
Lihat semua alat →Decode & Encode Base64 Online — Konversi Instan di Browser
Encoding & Pemformatan
Decode dan encode Base64 online gratis. Konversi real-time dengan dukungan UTF-8 dan emoji. 100% privat di browser Anda. Tanpa pendaftaran.
Format & Validasi JSON Online — Gratis, Cepat, Privat
Encoding & Pemformatan
Format, validasi, dan rapikan JSON langsung di browser Anda. Alat online gratis dengan deteksi error, minifikasi, dan salin sekali klik. 100% privat.
Konverter JSON ke YAML
Encoding & Pemformatan
Tempel JSON, dapatkan YAML seketika. Konversi langsung di browser. Siap untuk K8s/Compose, indentasi 2/4 spasi, penanganan kutipan otomatis. 100% privat.
URL Encoder & Decoder dengan URL Parser Bawaan
Encoding & Pemformatan
Decode atau encode URL online gratis secara real-time. Dual mode: encodeURI & encodeURIComponent, URL parser bawaan. Tanpa pendaftaran, 100% privat di browser.
Konverter YAML ke JSON
Encoding & Pemformatan
Tempel YAML, dapatkan JSON seketika. Konversi langsung di browser. Manifest K8s, spesifikasi OpenAPI, nilai Helm didukung. 100% privat, tanpa upload.
Konverter Basis Bilangan — Biner, Hex, Desimal & Oktal
Alat Konversi
Konversi antara biner, hex, desimal, oktal, dan basis apa pun (2-36) secara instan. Presisi BigInt, output siap kode. Gratis, privat — tanpa pendaftaran.