JSON fark

İki JSON belgesi yapıştırın — değişen yollar anında görünür, düğme yok, yükleme yok.

Nasıl kullanılır

  1. Eski JSONu “Orijinal JSON”a, yenisini “Değişen JSON”a yapıştırın — eklenen, silinen ya da değişen her yol yazarken görünür, basılacak bir düğme yoktur.
  2. Anahtar sırası, 1 ile 1.0, 1e0 ile 1 ve \u00e9 ile é fark değildir: karşılaştırma yapısalıdır. Biçimlendirme ya da anahtar sırası değişikliklerini incelemeniz gerekiyorsa bunun yerine metin fark aracını kullanın.
  3. Tam listeyi dışarı almak için “Farkı kopyala”yı kullanın: her satır +, - veya ~ ile başlar, ardından yol ve tam değer gelir; bir bilete ya da e-postaya hazır.

Örnek

İki belge

【Orijinal】
{"order":"A-2026-001","customer":{"name":"Ahmet","city":"İstanbul"},"total":1299.5,"paid":false}

【Değişen】
{"order":"A-2026-001","customer":{"name":"Ahmet","city":"Ankara"},"total":1399.0,"paid":true,"coupon":"HOSGELDIN10"}

Farklar

+ $.coupon "HOSGELDIN10"
~ $.customer.city "İstanbul" → "Ankara"
~ $.total 1299.5 → 1399.0
~ $.paid false → true
(+1 ~3 −0)

【Orijinal】/【Değişen】 satırları örnek başlıklarıdır; gerçek kullanımda iki belge iki giriş kutusuna gider. Yalnızca gerçek değer değişiklikleri listelenir: değişmeyen sipariş numarası ve müşteri adı gösterilmez ve anahtar sırası asla fark değildir.

Kurallar, sınırlar ve bilinen sorunlar

  • Bu yapısal bir farktır, metin farkı değildir: nesne anahtar sırası yok sayılır; 1, 1.0 ve 1e0 aynı sayıdır; "\u00e9" ile "é" aynı dizidir. Biçimlendirme değişiklikleri sizin için önemliyse metin fark aracını kullanın.
  • Sayılar tam ondalıklar olarak karşılaştırılır, asla JavaScript Number üzerinden değil: 9007199254740993 tam kalır ve 1e400 Infinity olmaz. Liste sayıyı hâlâ tam yazdığınız gibi gösterir.
  • Dizeler çözümlenmiş değerlerine göre karşılaştırılır ve standart JSON biçiminde gösterilir; yinelenen anahtarlar, tıpkı JSON.parse gibi son değeri korur ve bir uyarı kaç yinelenen bulunduğunu söyler.
  • Diziler sıralıdır: eklemeler ve silmeler hizalanır, dolayısıyla üste bir öğe eklemek tek bir “+” satırıdır, sonraki her öğenin değişmesi değildir. Taşımalar bir silme artı bir ekleme olarak bildirilir ve “dizi sırasını yok say” seçeneği yoktur.
  • Tam bir alt ağaç ekleme ya da silme tek bir yoldur. Çok uzun değerler ekranda “nesne · N anahtar” veya “dizi · N öğe” olarak gösterilir, oysa “Farkı kopyala” her zaman tam değeri içerir.
  • “Farkı kopyala” düz metin bir değişiklik listesi üretir (+ / - / ~, yol, tam değer), bir JSON Patch değil. Dizi eklemeleri ve silmeleri sonraki dizinleri kaydırır, dolayısıyla naif bir JSON Patch uygulanamaz.
  • Yollar $.a.b[0] biçimini kullanır. Silinen öğeler eski dizinlerini gösterir; eklenen ve değişen öğeler yeni belgeyi gösterir.
  • Sınırlar: toplam 200.000 karakterin üzerinde sonuçlar, yazmayı bıraktıktan yaklaşık 0,6 sn sonra güncellenir; 1.000.000 karakter üzeri tek belge ya da 256 düzey üzeri iç içe geçme hata olarak bildirilir, asla kesilmez. Hizalama sınırını aşan diziler dizine göre karşılaştırılır ve bir not bunu söyler; en fazla 400 değişiklik satırı işlenir ama kopyalama her zaman tam listeyi verir.
  • Dosya yükleme yok, URL yükleme yok, JSON Schema veya JSONPath sorgusu yok, geçmiş yok, paylaşım bağlantısı yok. Her şey tarayıcınızda çalışır: hiçbir şey yüklenmez veya saklanmaz.
  • Çince, Japonca ve Korece sayfalarında “Tam genişlik noktalama” varsayılan olarak açıktır: dizelerin dışındaki noktalama ASCIIye katlanır, dizelerin içeriği ise tam yazdığınız gibi bırakılır.

İki belge karşılaştırıldığında insanların genellikle sonra ihtiyaç duyduğu şeyler.