JSON Diff: JSON Nesnelerini Karşılaştırın

Neyin değiştiğini tam olarak görmek için iki JSON belgesi yapıştırın. Her fark $.users[2].email gibi bir yolla listelenir; biçimlendirme veya anahtar sırası asla yanlış alarm üretmez.

Tarayıcınızda çalışırKayıt gerekmezHiçbir şey yüklenmez

Anahtar sırası her zaman yok sayılır.

JSON Diff nasıl kullanılır?

  1. Orijinal JSON'u sola, değiştirilmiş JSON'u sağa yapıştırın ya da iki dosya açın.
  2. Sözdizimi hataları her kutunun altında satır ve sütunla gösterilir, böylece hızlıca düzeltebilirsiniz.
  3. Değişen yollar tablosunu okuyun: her satır bir değerin eklendiğini, silindiğini veya değiştiğini eski ve yeni değerleriyle birlikte gösterir.
  4. Listeler küme niteliğindeyse (örneğin etiketler veya izinler) Dizi sırasını yok say'ı işaretleyin.
  5. Değişiklikleri bağlamı içinde görmek için yan yana görünüme kaydırın ya da değişiklik listesini JSON olarak kopyalayın.

Yapısal JSON diff neden metin diff'inden üstündür?

Düz bir metin diff'i karakterleri ve satırları karşılaştırır; bu yüzden aynı veriyi içeren iki JSON dosyası, biri küçültülmüş, farklı girintilenmiş veya anahtarları başka sırada olduğunda tamamen farklı görünebilir. Bu araç önce iki belgeyi de ayrıştırır ve veriyi karşılaştırır: nesneler sıradan bağımsız olarak anahtar anahtar karşılaştırılır; sayılar, dizeler, boolean'lar ve null değerine göre karşılaştırılır. Yalnızca gerçek değişiklikler raporlanır.

Değişiklikler nasıl raporlanır?

Her fark JSONPath tarzında bir konum (örneğin $.owner.email veya $.items[3].price) ve şu üç türden birini alır:

  • eklendi: anahtar veya dizi öğesi yalnızca değiştirilmiş JSON'da var.
  • kaldırıldı: yalnızca orijinal JSON'da var.
  • değişti: ikisinde de var ama değer farklı; bir dizenin sayıya dönüşmesi gibi tür değişiklikleri de dahil.

Diziler en uzun ortak alt dizi (LCS) algoritmasıyla hizalanır; böylece bir listenin başına tek bir öğe eklemek, sonraki tüm öğeleri değişmiş olarak işaretlemek yerine tek bir ekleme olarak raporlanır.

Dizi sırasını yok saymak

Birçok API, sırasının bir anlamı olmayan listeler döndürür; roller, etiketler veya ID'ler gibi. Dizi sırasını yok say açıkken diziler koleksiyon olarak karşılaştırılır: bir öğe ancak diğer tarafta eşit bir karşılığı yoksa eklenmiş veya kaldırılmış sayılır. Yan yana görünüm de dizi öğelerini sıralar, böylece eşit listeler hizalanır.

Tipik kullanımlar

Staging ile production arasındaki API yanıtlarını karşılaştırın, bir migration'ın yapılandırma dosyasında neyi değiştirdiğini kontrol edin, iki package.json veya tsconfig dosyası arasındaki farkları inceleyin ve snapshot testlerinde hata ayıklayın.

Sıkça sorulan sorular

JSON karşılaştırırken anahtar sırası önemli mi?
Hayır. JSON nesneleri sırasızdır; bu yüzden {"a":1,"b":2} ve {"b":2,"a":1} eşit olarak raporlanır. Diziler sıralı olduğu için dizi sırası varsayılan olarak önemlidir, ancak Dizi sırasını yok say ile bunu kapatabilirsiniz.
JSON'um bir sunucuya yükleniyor mu?
Hayır. İki belge de tarayıcınızda ayrıştırılır ve karşılaştırılır. Ağ üzerinden hiçbir şey gönderilmez; bu da aracı token veya müşteri verisi içeren API yanıtları için güvenli kılar.
$.users[2].email gibi yollar ne anlama geliyor?
$ belgenin köküdür, .users bir anahtardır ve [2] bir dizinin üçüncü öğesidir (indisler 0'dan başlar). Boşluk veya özel karakter içeren anahtarlar $["first name"] gibi köşeli parantez içinde yazılır.
1, 1.0'a eşit mi?
Evet. İkisi de aynı sayıya ayrıştırılır, bu yüzden fark olarak raporlanmaz. 1 ve "1" gibi bir sayı ile bir dize ise farklıdır ve değişti olarak raporlanır.
Yorum veya sondaki virgül içeren JSON'u karşılaştırabilir miyim?
Standart JSON bunlara izin vermez; bu yüzden böyle bir girdi tam satır ve sütunuyla işaretlenir. Yorumları veya virgülleri kaldırın ya da belgeyi önce JSON Formatter ile temizleyin.

İlgili araçlar