JSON Diff: Bandingkan Dua Dokumen JSON
Bandingkan dua dokumen JSON berdasarkan struktur, bukan baris. Semuanya berjalan di perangkat Anda — tidak ada yang diunggah.
- Masuk
- Two JSON documents
- Keluar
- Path-level changes · JSON Patch
Asli
valid
Diubah
valid
Perbedaan
6 perubahan
- Diubah/version
− 1
+ 2
- Ditambah/settings/language
+ "en"
- Ditambah/users/0
+ {"id":3,"name":"Grace","email":"grace@example.com"}
- Diubah/users/1/email
− "ada@example.com"
+ "ada@example.org"
- Dihapus/users/1
− {"id":2,"name":"Linus","email":"linus@example.com"}
- Tipe berubah/limitstring → angka
− "100"
+ 100
Bandingkan JSON berdasarkan makna, bukan teks
Alat JSON diff ini membandingkan dua dokumen JSON sebagai data. Objek dicocokkan kunci demi kunci apa pun urutannya, format dan indentasi diabaikan, dan setiap perbedaan dicantumkan dengan path yang tepat, jenis perubahannya, serta nilai lama dan barunya. Array berisi record bisa dicocokkan berdasarkan field id, sehingga daftar yang diurutkan ulang atau baris yang disisipkan di atas tidak tampak seolah semuanya berubah. Ekspor hasilnya sebagai JSON Patch RFC 6902 atau laporan teks biasa. Kedua dokumen tetap di browser Anda; tidak ada yang diunggah.
Cara membandingkan dua file JSON
- Tempel JSON asli di kiri dan JSON baru di kanan, atau jatuhkan berkas
.jsonke masing-masing sisi. - Perbaiki error parse yang muncul di atas panel; error itu menyebutkan baris dan kolomnya.
- Baca daftar perubahan, masing-masing dengan path JSON Pointer seperti
/users/2/email, atau beralih ke tampilan pohon untuk menelusurinya dalam konteks. - Aktifkan Cocokkan item array per kunci dan masukkan field yang mengidentifikasi record, biasanya
id. - Saring berdasarkan ditambah, dihapus, diubah, atau tipe berubah, lalu salin JSON Patch atau unduh laporan teks.
Kenapa diff teks bukan alat yang tepat untuk JSON
Dua dokumen JSON bisa identik sebagai data tetapi sangat berbeda sebagai teks. Satu API mengembalikan kunci dalam urutan berbeda, satu berkas di-minify dan yang lain dirapikan, satu menulis 1.0 sementara yang lain 1. Cek perbedaan teks berbasis baris akan menandai semua itu. Diff struktural mem-parse kedua sisi lebih dulu dan membandingkan nilainya, jadi hanya perubahan nyata yang dilaporkan: kunci yang ditambah atau dihapus, nilai yang berubah, atau nilai yang tipenya berubah, seperti string "42" yang menjadi angka 42.
Angka dibandingkan berdasarkan nilai dengan presisi penuh, jadi 1.50 sama dengan 1.5, sedangkan dua ID 20 digit yang berbeda di digit terakhir tetap dilaporkan berbeda, yang akan terlewat jika dibandingkan lewat angka JavaScript.
- Ditambah
- Kunci atau item array hanya ada di dokumen baru.
- Dihapus
- Kunci atau item array hanya ada di dokumen asli.
- Diubah
- Tempat sama, tipe sama, nilai berbeda.
- Tipe berubah
- Nilai menjadi tipe JSON lain, misalnya objek menjadi array atau angka menjadi string.
Membandingkan array: per posisi atau per kunci
Secara bawaan item array dibandingkan posisi demi posisi: item 0 dengan item 0, item 1 dengan item 1. Itu benar untuk daftar yang urutannya penting, seperti koordinat atau langkah. Untuk daftar record tidak: sisipkan satu user di atas dan setiap user setelahnya tampak berubah.
Dengan Cocokkan item array per kunci, item dipasangkan berdasarkan field pengenal, id secara bawaan. Setiap record dibandingkan dengan record ber-id sama di mana pun letaknya, sehingga hasilnya menyebut satu user ditambah dan satu email berubah. Pencocokan hanya dipakai jika setiap item di kedua sisi adalah objek dengan string atau angka unik di field itu; jika tidak, array dibandingkan per posisi.
Tampilan pohon menampilkan kedua dokumen yang digabung menjadi satu kerangka. Cabang yang berisi perubahan terbuka otomatis dan yang tidak berubah tetap terlipat, dengan penambahan berwarna hijau, penghapusan merah, dan nilai yang berubah ditampilkan sebagai lama → baru. Matikan Hanya perubahan untuk melihat kunci yang tidak berubah di sekitarnya sebagai konteks.
Path, JSON Pointer, dan JSON Patch
Setiap perubahan ditunjuk dengan JSON Pointer (RFC 6901): path dari root yang dipisahkan garis miring seperti /orders/0/total, di mana item array dinomori mulai dari nol dan karakter ~ serta / dalam kunci ditulis ~0 dan ~1. Path kosong berarti seluruh dokumen.
Ekspornya berupa JSON Patch (RFC 6902): daftar operasi add, remove, dan replace yang mengubah dokumen kiri menjadi dokumen kanan jika diterapkan berurutan. Library seperti fast-json-patch, jsonpatch untuk Python, dan dukungan patch Kubernetes menerapkannya langsung. Penghapusan array ditulis dari indeks tertinggi ke bawah agar indeks setiap operasi tetap benar saat dijalankan.
Untuk merapikan salah satu dokumen lebih dulu, format dengan JSON formatter; untuk mengubah hasilnya ke YAML atau CSV, gunakan konverter data.
Pertanyaan yang sering diajukan
- Bagaimana cara membandingkan dua file JSON?
- Tempel atau jatuhkan JSON asli di kiri dan JSON baru di kanan. Setiap perbedaan dicantumkan dengan path, jenis perubahan, serta nilai lama dan barunya.
- Apakah urutan kunci berpengaruh saat membandingkan JSON?
- Tidak. Objek dibandingkan kunci demi kunci, jadi kunci yang sama dalam urutan berbeda dianggap sama. Spasi dan indentasi juga diabaikan.
- Bagaimana membandingkan array JSON jika urutannya berubah?
- Aktifkan Cocokkan item array per kunci dan masukkan field yang mengidentifikasi setiap item, seperti id. Item lalu dipasangkan berdasarkan nilai itu, bukan posisi.
- Apa itu JSON Patch?
- JSON Patch, yang didefinisikan di RFC 6902, adalah array JSON berisi operasi seperti add, remove, dan replace, masing-masing dengan path. Menerapkannya ke dokumen asli menghasilkan dokumen baru.
- Apa arti tipe berubah?
- Nilai di path itu menjadi tipe JSON lain, misalnya angka menjadi string atau objek menjadi array. Biasanya ini menandakan bug di sistem yang menghasilkan data tersebut.
- Bisakah membandingkan file JSON besar?
- Bisa. Berkas beberapa megabyte dibandingkan dalam waktu jauh di bawah satu detik di komputer biasa, karena parsing dan perbandingan berjalan lokal di browser Anda.
- Apakah JSON saya diunggah?
- Tidak. Kedua dokumen di-parse dan dibandingkan di browser Anda dan tidak pernah dikirim ke mana pun, jadi aman untuk membandingkan respons API yang berisi data pribadi atau rahasia.