Diff JSON

Tempel dua dokumen JSON — jalur yang berubah muncul seketika, tanpa tombol, tanpa unggahan.

Cara menggunakan

  1. Tempel JSON lama ke "JSON asli" dan yang baru ke "JSON yang diubah" — setiap jalur yang ditambah, dihapus, atau berubah muncul saat Anda mengetik, tidak ada tombol yang perlu ditekan.
  2. Urutan kunci, 1 vs 1.0, 1e0 vs 1, dan \u00e9 vs é bukan perbedaan: perbandingannya struktural. Bila Anda perlu meninjau perubahan format atau urutan kunci, gunakan alat diff teks.
  3. Gunakan "Salin diff" untuk membawa daftar lengkapnya: setiap baris berupa +, -, atau ~ diikuti jalur dan nilai lengkap, siap untuk tiket atau surel.

Contoh

Dua dokumen

【Asli】
{"order":"A-2026-001","customer":{"name":"Rina","city":"Jakarta"},"total":1299000,"paid":false}

【Baru】
{"order":"A-2026-001","customer":{"name":"Rina","city":"Bandung"},"total":1399000,"paid":true,"coupon":"WELCOME10"}

Perbedaan

+ $.coupon "WELCOME10"
~ $.customer.city "Jakarta" → "Bandung"
~ $.total 1299000 → 1399000
~ $.paid false → true
(+1 ~3 −0)

Baris 【Asli】/【Baru】 hanyalah judul contoh; dalam pemakaian nyata kedua dokumen dimasukkan ke dua kotak masukan. Hanya perubahan nilai nyata yang didaftar: nomor pesanan dan nama pelanggan yang tidak berubah tidak ditampilkan, dan urutan kunci tidak pernah menjadi perbedaan.

Aturan, batasan, dan masalah yang diketahui

  • Ini diff struktural, bukan diff teks: urutan kunci objek diabaikan; 1, 1.0, dan 1e0 adalah angka yang sama; "\u00e9" dan "é" adalah string yang sama. Gunakan alat diff teks bila perubahan format penting bagi Anda.
  • Angka dibandingkan sebagai desimal eksak, tidak pernah melalui Number JavaScript: 9007199254740993 tetap eksak dan 1e400 tidak menjadi Infinity. Daftarnya tetap menampilkan angka persis seperti yang Anda ketik.
  • String dibandingkan berdasarkan nilai terdekodenya dan ditampilkan dalam bentuk JSON standar; kunci duplikat menyimpan nilai terakhir, seperti JSON.parse, dan peringatan memberi tahu berapa duplikat yang ditemukan.
  • Larik berurutan: penyisipan dan penghapusan diselaraskan, jadi menambah satu item di awal menjadi satu baris "+", bukan perubahan pada setiap item berikutnya. Perpindahan dilaporkan sebagai satu penghapusan plus satu penambahan, dan tidak ada opsi "abaikan urutan larik".
  • Menambah atau menghapus seluruh subtree adalah satu jalur. Nilai yang sangat panjang ditampilkan sebagai "objek · N kunci" atau "larik · N item" di layar, sedangkan "Salin diff" selalu memuat nilai lengkap.
  • "Salin diff" menghasilkan daftar perubahan teks biasa (+ / - / ~, jalur, nilai lengkap), bukan JSON Patch. Penyisipan dan penghapusan larik menggeser indeks berikutnya, sehingga JSON Patch naif tidak akan berlaku.
  • Jalur memakai bentuk $.a.b[0]. Item yang dihapus menunjuk ke indeks lamanya; item yang ditambah dan diubah menunjuk ke dokumen baru.
  • Batasan: hasil diperbarui sekitar 0,6 dtk setelah Anda berhenti mengetik bila gabungannya di atas 200.000 karakter; satu dokumen di atas 1.000.000 karakter atau penyarangan di atas 256 tingkat dilaporkan sebagai kesalahan, tidak pernah dipotong. Larik di atas batas penyelarasan dibandingkan berdasarkan indeks dan ada catatan yang menyebutkannya; paling banyak 400 baris perubahan dirender, tetapi penyalinan selalu memberi daftar lengkap.
  • Tanpa unggahan berkas, tanpa pemuatan URL, tanpa kueri JSON Schema atau JSONPath, tanpa riwayat, dan tanpa tautan berbagi. Semua berjalan di peramban Anda: tidak ada yang diunggah atau disimpan.
  • Pada halaman bahasa Mandarin, Jepang, dan Korea, "Tanda baca lebar penuh" aktif secara bawaan: tanda baca di luar string dilipat ke ASCII, sedangkan isi string dibiarkan persis seperti yang diketik.

Yang biasanya dibutuhkan berikutnya setelah kedua dokumen dibandingkan.