Lewati ke konten

Alat Perbandingan JSON - Bandingkan JSON Daring Gratis | Beda JSON

Bandingkan JSON daring secara gratis dengan alat perbandingan JSON kami yang cepat. Temukan perbedaan secara instan dengan hasil yang diberi kode warna. JSON diff 100% aman, berbasis peramban. Tidak perlu mendaftar.

Alat Pembanding JSON

Kalkulator pemuatan...
📚

Dokumentasi

Alat perbandingan JSON, yang sering disebut alat diff JSON, membandingkan dua nilai JSON (JavaScript Object Notation) dan melaporkan perubahan di antara keduanya. Alat ini mencantumkan setiap properti atau item array yang ditambahkan, dihapus, atau diubah, beserta lokasi persisnya dalam data. Halaman ini menjelaskan cara kerja alat perbandingan JSON whiz.tools, dengan contoh yang dikerjakan berdasarkan logika perbandingan sebenarnya.

Apa itu perbandingan JSON?

Perbandingan JSON adalah proses memeriksa dua dokumen JSON satu sama lain untuk menemukan perbedaan. Dokumen JSON adalah teks yang tersusun dari objek (pasangan kunci-nilai dalam kurung kurawal), array (daftar berurutan dalam kurung siku), dan nilai primitif seperti string, angka, boolean, dan null. Membandingkan dua dokumen ini secara kasatmata menjadi lambat dan rentan kesalahan setelah ukurannya melebihi beberapa baris, sehingga alat perbandingan melakukan pencocokan secara otomatis dan menyoroti setiap perubahan.

Pengembang menggunakan perbandingan semacam ini untuk memeriksa respons API, melacak perubahan dalam berkas konfigurasi, memastikan migrasi data tidak kehilangan informasi, dan meninjau perubahan pada berkas JSON dalam pengendalian versi.

Cara alat membandingkan dua nilai JSON

Alat ini mengurai kedua input dengan parser JSON standar, lalu menelusuri kedua nilai yang dihasilkan secara bersamaan, tingkat demi tingkat. Pada setiap langkah, alat ini mengajukan tiga pertanyaan, secara berurutan:

  1. Apakah kedua nilai memiliki tipe yang berbeda (misalnya, yang satu objek dan yang lain angka), atau apakah salah satunya null sementara yang lain bukan? Jika ya, alat mencatat perubahan pada lokasi tersebut dan berhenti membandingkan bagian yang lebih dalam.
  2. Apakah kedua nilai merupakan primitif (string, angka, boolean, atau null)? Jika ya, alat membandingkannya secara langsung. Setiap perbedaan, termasuk perubahan dari angka 123 menjadi string "123", dihitung sebagai perubahan.
  3. Apakah kedua nilai merupakan objek atau keduanya array? Jika ya, alat membandingkan isinya menggunakan aturan di bawah ini, lalu menelusuri objek atau array bertingkat apa pun secara rekursif.

Setiap perbedaan dicatat beserta jalurnya, seperti user.address.city atau tags[1], sehingga mudah ditemukan dalam dokumen asli. Anggota objek digabungkan dengan titik, sedangkan item array ditampilkan dengan indeksnya dalam kurung siku. Perbedaan di bagian paling atas dokumen, seperti array yang digantikan oleh objek, tidak memiliki path di dalam data, sehingga diberi label $. Label ini adalah pengenal akar yang ditetapkan oleh RFC 9535, standar JSONPath, dan mewakili seluruh dokumen.

Membandingkan objek

Untuk dua objek JSON, alat ini mengumpulkan setiap kunci yang muncul di salah satu objek. Untuk setiap kunci:

  • Jika kunci hanya ada di objek kedua, kunci tersebut merupakan properti yang ditambahkan.
  • Jika kunci hanya ada di objek pertama, kunci tersebut merupakan properti yang dihapus.
  • Jika kunci ada di keduanya, alat membandingkan kedua nilainya secara rekursif.

Urutan kunci tidak berpengaruh. Standar JSON tidak menetapkan urutan anggota objek, sehingga {"a":1,"b":2} dan {"b":2,"a":1} diperlakukan sebagai identik.

Membandingkan array

Array dibandingkan berdasarkan posisi, bukan isi. Alat ini menelusuri kedua array berdasarkan indeks dan membandingkan apa pun yang berada pada setiap indeks, hingga panjang array yang lebih panjang. Jika salah satu array lebih pendek, item tambahan di akhir array yang lebih panjang dilaporkan sebagai ditambahkan atau dihapus.

Artinya, alat ini tidak pernah mencoba mencocokkan item array berdasarkan isinya. Alat ini tidak menyadari bahwa sebuah objek telah "dipindahkan" dari indeks 1 ke indeks 2; alat ini hanya melihat bahwa nilai pada setiap indeks berubah. Menghapus atau menyisipkan item di tengah array menggeser setiap item berikutnya satu posisi, sehingga biasanya ditampilkan sebagai beberapa perubahan terpisah, bukan sebagai satu penambahan atau penghapusan yang jelas.

Contoh perhitungan

Contoh 1: membandingkan dua objek

JSON pertama:

1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2

JSON kedua:

1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2

Hasil:

  • Diubah user.address.city: "New York" → "Boston"
  • Diubah user.address.zip: "10001" → "02108"

Contoh 2: perubahan array di bagian akhir

JSON pertama:

1{ "tags": ["important", "urgent", "review"] }
2

JSON kedua:

1{ "tags": ["important", "critical", "review", "documentation"] }
2

Indeks 0 tidak berubah, indeks 1 berubah, indeks 2 tidak berubah, dan indeks 3 hanya ada di array kedua. Hasil:

  • Diubah tags[1]: "urgent" → "critical"
  • Ditambahkan tags[3]: "documentation"

Contoh 3: menghapus item dari tengah array

Contoh ini menunjukkan apa yang terjadi ketika sebuah item dihapus dari tengah array, karena hal tersebut sering menimbulkan kebingungan.

JSON pertama:

1{
2  "products": [
3    { "id": 1, "name": "Laptop", "price": 999.99 },
4    { "id": 2, "name": "Mouse", "price": 24.99 },
5    { "id": 3, "name": "Keyboard", "price": 59.99 }
6  ]
7}
8

JSON kedua, dengan entri "Mouse" yang dihapus dan entri "Monitor" yang ditambahkan di bagian akhir:

1{
2  "products": [
3    { "id": 1, "name": "Laptop", "price": 899.99 },
4    { "id": 3, "name": "Keyboard", "price": 59.99 },
5    { "id": 4, "name": "Monitor", "price": 349.99 }
6  ]
7}
8

Seseorang yang melihat ini akan berkata, "Mouse dihapus dan Monitor ditambahkan." Karena alat membandingkan secara ketat berdasarkan indeks, hasilnya tidak demikian. Alat ini membandingkan indeks 0 dengan indeks 0, indeks 1 dengan indeks 1, dan indeks 2 dengan indeks 2, sehingga setiap bidang setelah item yang dihapus dibandingkan dengan objek yang salah. Hasil sebenarnya adalah tujuh perubahan:

  • Diubah products[0].price: 999.99 → 899.99
  • Diubah products[1].id: 2 → 3
  • Diubah products[1].name: "Mouse" → "Keyboard"
  • Diubah products[1].price: 24.99 → 59.99
  • Diubah products[2].id: 3 → 4
  • Diubah products[2].name: "Keyboard" → "Monitor"
  • Diubah products[2].price: 59.99 → 349.99

Untuk mendapatkan hasil yang lebih jelas saat membandingkan daftar seperti ini, urutkan kedua array atau gunakan kunci yang sama untuk keduanya sebelum menempelkannya, misalnya dengan menulis setiap daftar dalam urutan yang sama atau mencocokkan objek berdasarkan bidang ID sebelum perbandingan.

Hal-hal yang tidak dilakukan alat

  • Alat ini tidak mencocokkan item array berdasarkan isinya. Seperti ditunjukkan di atas, alat ini hanya membandingkan berdasarkan posisi indeks, sehingga tidak dapat mengenali bahwa suatu item dipindahkan, bukan diubah.
  • Alat ini tidak mendeteksi referensi sirkular. Dalam praktiknya, ini bukan keterbatasan: kedua input berasal dari JSON.parse, yang selalu membangun struktur pohon biasa dan tidak pernah dapat menghasilkan nilai yang merujuk kembali ke dirinya sendiri. Referensi sirkular tidak dapat ada dalam teks JSON yang valid sejak awal.
  • Alat ini tidak menyediakan pengaturan untuk mengurutkan array sebelum perbandingan. Mengurutkan ulang item dalam input sebelum menempelkannya adalah satu-satunya cara untuk menghindari efek pergeseran indeks yang dijelaskan di atas.

Cara menggunakan alat ini

  1. Tempelkan dokumen JSON pertama ke kotak kiri dan dokumen kedua ke kotak kanan.
  2. Alat ini membandingkan keduanya secara otomatis setelah kedua kotak berisi teks, atau klik Compare untuk membandingkannya secara manual.
  3. Baca daftar hasilnya. Setiap baris menampilkan path, seperti user.age, serta apakah path tersebut ditambahkan, dihapus, atau diubah, dengan nilai lama dan baru ditampilkan berdampingan.
  4. Klik Copy untuk menyalin hasil sebagai teks biasa.

Jika sebuah kotak berisi teks yang bukan JSON valid, alat menampilkan kesalahan di bawah kotak tersebut, bukan hasil perbandingan. Jika kedua kotak tidak valid, kedua kesalahan muncul sekaligus.

Pertanyaan yang sering diajukan

Apa yang dihitung sebagai perbedaan antara dua nilai JSON? Sebuah properti atau item array dianggap berbeda jika hanya ada di salah satu dari dua dokumen, atau jika ada di keduanya tetapi memiliki nilai atau tipe yang berbeda. Mengubah nilai dari angka 5 menjadi string "5" dihitung sebagai perubahan, meskipun keduanya mungkin tampak serupa.

Apakah urutan item berpengaruh? Itu bergantung pada wadahnya. Objek JSON tidak memiliki urutan anggota yang ditetapkan, sehingga dua objek dengan kunci dan nilai yang sama dalam urutan berbeda diperlakukan sebagai identik. Array memiliki urutan, dan alat membandingkannya berdasarkan posisi indeks, sehingga pemindahan item ke posisi lain dilaporkan sebagai serangkaian perubahan, bukan sebagai pemindahan.

Apa arti path hasil $? Artinya seluruh dokumen berubah, bukan hanya satu bagiannya. Hal ini terjadi ketika kedua input memiliki jenis nilai yang berbeda di tingkat teratas, misalnya array di satu sisi dan objek di sisi lain, atau angka biasa 1 dan 2. $ adalah pengenal akar dari RFC 9535, standar JSONPath.

Apakah data JSON saya dikirim ke server? Tidak. Perbandingan dijalankan di browser menggunakan JavaScript. Tidak ada data yang diunggah.

Apakah pemformatan, seperti indentasi atau minifikasi, memengaruhi hasil? Tidak. Kedua input diuraikan menjadi nilai JSON sebelum dibandingkan, sehingga spasi putih, indentasi, dan jeda baris tidak berpengaruh. Hanya data sebenarnya yang dibandingkan.

Dapatkah alat membandingkan JSON dengan komentar atau koma di akhir? Tidak. JSON standar, sebagaimana ditetapkan dalam RFC 8259, tidak mengizinkan komentar atau koma di akhir. Input yang memuatnya ditolak sebagai tidak valid.

Referensi

  1. IETF. "Format Pertukaran Data JavaScript Object Notation (JSON)." RFC 8259, Desember 2017.
  2. IETF. "Patch JavaScript Object Notation (JSON)." RFC 6902, April 2013.
  3. IETF. "JSONPath: Ekspresi Kueri untuk JSON." RFC 9535, Februari 2024. (Bagian 2,2 mendefinisikan pengenal akar $.)
  4. Mozilla Developer Network. "Penguraian JSON.parse()."