Jika membandingkan dua dokumen JSON dengan diff teks biasa (seperti untuk kode), hasilnya sering menyesatkan: data yang sama bisa ditulis dengan urutan kunci berbeda, indentasi berbeda, atau jumlah spasi berbeda — dan diff teks akan menunjukkan "perbedaan" padahal datanya sebenarnya identik.
Perbandingan struktural
JSON Diff struktural mengurai kedua dokumen menjadi pohon nilai dan membandingkan data itu sendiri: apakah suatu field ada, nilai apa yang dikandungnya, apakah tipenya cocok. Urutan kunci objek, spasi berlebih, atau gaya indentasi tidak diperhitungkan di sini — itu bukan bagian dari data itu sendiri.
Apa yang ditampilkan diff
Hasil perbandingan struktural yang umum menyoroti tiga jenis perubahan: field yang ditambahkan di dokumen kedua, field yang dihapus dari dokumen pertama, dan field yang ada di keduanya tetapi dengan nilai berbeda. Untuk array, perbandingan lebih rumit — perlu diputuskan apakah membandingkan elemen berdasarkan posisi atau mencoba mencocokkan objek yang mirip.
Untuk apa ini dibutuhkan
- Membandingkan respons API sebelum dan sesudah perubahan di backend untuk melihat perbedaan data yang sebenarnya.
- Memverifikasi bahwa perubahan pada berkas konfigurasi tidak menyentuh sesuatu yang tidak diinginkan.
- Menemukan regresi dalam pengujian di mana JSON yang diharapkan dan yang sebenarnya berbeda.
Kenapa id.json "kehilangan" kunci yang sebenarnya tidak diperlukan
Bahasa Indonesia tidak memiliki bentuk jamak gramatikal seperti bahasa Inggris — kata benda tidak berubah bentuk untuk menyatakan jamak (cukup "buku", bukan "books"), dan pengulangan kata ("buku-buku") jarang dipakai dalam string aplikasi. Akibatnya, file terjemahan id.json pada library seperti react-i18next sering hanya punya satu bentuk kunci untuk pesan yang di en.json terpecah menjadi item_one dan item_other. Saat menjalankan diff struktural antara en.json dan id.json, kunci yang "hilang" di sisi Indonesia itu bukan bug — itu memang tidak dibutuhkan karena tata bahasa Indonesia tidak membedakan bentuk tunggal dan jamak.
Membandingkan array: berdasarkan posisi atau kunci
Pendekatan paling sederhana adalah membandingkan elemen array indeks demi indeks, tetapi jika sebuah elemen baru disisipkan di tengah array, semua posisi setelahnya "bergeser" dan diff akan menunjukkan perubahan pada setiap elemen setelah titik penyisipan, padahal sebenarnya hanya satu elemen yang berubah. Alat yang lebih pintar mencoba mencocokkan elemen berdasarkan field unik (misalnya id) agar bisa menunjukkan penyisipan atau penghapusan yang sebenarnya, bukan rentetan perubahan palsu.