JSON Karşılaştırma

İki JSON belgesini karşılaştırın ve hangi alanların eklendiğini, çıkarıldığını veya değiştirildiğini görün

JSON A (sol / önce)

JSON B (sağ / sonra)

JSON Karşılaştırma

İki JSON belgesini karşılaştırın ve hangi alanların eklendiğini, çıkarıldığını veya değiştirildiğini görün

Özellikler

  • Herhangi iki JSON değeri arasında yapısal karşılaştırma — nesneler, diziler ve ilkel değerlerin tümü düzgün şekilde gezilir (null, typeof-null hatasını düzelterek nesne değil skaler olarak işlenir)
  • Her fark RFC 6901 JSON Pointer yolu olarak raporlanır (ör. `/users/0/email`), böylece derin iç içe veride tam düğüme doğrudan gidebilirsiniz
  • Değiştirilen girişler öncesi VE sonrası değerleri yan yana gösterir; 'active'in true→false olduğu mu yoksa sayının değiştiği mi anında bellidir
  • Özet sayılar: eklenen, çıkarılan, değiştirilen ve değişmeyen yapraklar — yol bazlı detayı okumadan farkın ölçeğini bir bakışta görün
  • Taraf bazlı ayrıştırma hatası raporu hangi girdinin başarısız olduğunu söyler ve JavaScript motorunun ayrıştırma mesajını içerir; A mı B mi bozuk tahmin etmekle vakit kaybetmezsiniz
  • Raporu kopyala düğmesi tüm farkı (Eklenen / Çıkarılan / Değiştirilen bölümleri artı değişmeyen sayısı) düz metin olarak verir — kod incelemesine veya commit mesajına yapıştırın
  • Örnek Yükle her iki paneli küçük gerçekçi bir örnekle (rol + adres değişiklikleri olan kullanıcı kaydı) doldurur; yeni kullanıcılar yazmadan farkın çalıştığını görür
  • Tamamen istemci tarafı: JSON A ve JSON B tarayıcınızda ayrıştırılır ve karşılaştırılır; hiçbir şey yüklenmez ve sayfa yüklendikten sonra araç çevrimdışı çalışır

Nasıl Kullanılır

  1. "Önceki" JSON'unuzu sol metin alanına (JSON A), "sonraki" JSON'unuzu sağa (JSON B) yapıştırın.
  2. Karşılaştır'a tıklayın. Fark özyinelemeli olarak hesaplanır; nesneler anahtara, diziler dizine göre karşılaştırılır.
  3. Özet sayıları okuyun: kaç anahtar eklendi, çıkarıldı, değiştirildi ve kaç yaprak eşleşti.
  4. Hangi JSON Pointer yollarının değiştiğini görmek için yol bazlı listeleri kaydırın; değiştirilen satırlar öncesi → sonrası değerleri gösterir.
  5. Tüm farkı düz metin olarak almak için Raporu kopyala'ya tıklayın — inceleme notları, hata raporları veya commit mesajları için kullanışlıdır.
  6. Kendi verinizi yapıştırmadan önce çalışan bir örnek görmek için Örnek Yükle'yi kullanın.

İpuçları ve En İyi Uygulamalar

  • Yapısal olarak eşit belgelerin metin farkında da değişiklik olarak görünmemesini istiyorsanız önce her iki tarafta JSON Formatlayıcı çalıştırın.
  • Sıranın önemli olduğu büyük diziler için bu araç tam uyumludur; kümeler için karşılaştırmadan önce kararlı bir anahtara göre ön-sıralayın.
  • Yol çıktısı RFC 6901'dir, dolayısıyla değişiklikleri programatik olarak uygulamak için doğrudan fast-json-patch gibi kütüphanelere verebilirsiniz.
  • Bir yapılandırma veya fikstür JSON'unda neyin değiştiğini gözden geçirenlere göstermek için raporu PR açıklamalarına kopyalayın.
  • Ayrıştırma hataları belirli bir sütunu işaret ediyorsa JavaScript motoru mesajı genellikle json5 stili ayrıştırıcılardan satır/sütun içerir — ancak burada katı JSON.parse kullanırız, yani satır/sütun host'tan gelir.

SSS

Diziler nasıl karşılaştırılır — dizine göre mi değere göre mi?

Dizine göre. A'nın 0. elemanı B'nin 0. elemanıyla, 1'i 1'le karşılaştırılır vs. A daha uzunsa fazla son dizinler Çıkarılan olarak raporlanır; B daha uzunsa fazla kuyruk Eklenen olur. Bu hızlı ve öngörülebilirdir ama büyük bir dizinin başına tek elemanlı ekleme çok sayıda "değiştirilen" girişine yol açar. Sıra duyarsız karşılaştırmalar (ör. benzersiz kimliklerin kümeleri) için önce her iki diziyi sıralayın veya tanımlayıcıya göre anahtarlanmış nesnelere ön-işleyin.

Sonuçtaki yol notasyonu nedir?

RFC 6901 JSON Pointer: yollar JSON ağacına inen eğik-çizgi ayrımlı tokenlardır. `/users/0/email` "kullanıcılar dizisinin 0. elemanının email özelliği" anlamına gelir. `~` içeren anahtarlar `~0`, eğik çizgiler `~1` olarak kaçışlanır. Kök kendisi `/` olarak gösterilir. Bu, yama araçları, JSON Schema instancePath ve json-formatter pointer üstüne gelme için kullanılan aynı yol notasyonudur.

null nasıl ele alınır?

null bir yaprak değer olarak işlenir, nesne olarak değil — JavaScript'te typeof null === 'object' olsa bile. Yani {a: null} vs {a: {}} boş nesneye inmek yerine değiştirilen olarak görünür. {a: null} vs {a: null} bir değişmeyen yaprak sayılır ve {a: null} vs {a: 0} öncesi=null sonrası=0 ile değiştirilen olarak görünür.

Karşılaştırma özel karakterli anahtarları işler mi?

Evet. Nokta, eğik çizgi, parantez veya tilde içeren anahtarlar yol çıktısında JSON-Pointer-kaçışlıdır — `~` `~0` olur, `/` `~1` olur. Yani tam adı `a/b` olan bir anahtar yolda `/a~1b` olarak görünür, kesinlikle tersine çevrilebilir.

Değişmeyen sayısı neden beklediğimle eşleşmiyor?

Değişmeyenler YAPRAK düzeyinde sayılır — A ile B arasında eşit karşılaştırılan ilkel değerler. Alt ağacı tamamen aynı olan derin iç içe nesne, alt ağacın tamamı için bir değil yaprak başına bir değişmeyen kayıt katkıda bulunur. Bu, sayıyı gerçek bir akıl sağlığı kontrolü yapar: "kaç ilkel değer aynı kaldı".

Bir taraf null veya boş ise ne olur?

Boş girdi null olarak ayrıştırılır (`{a:1}` vs boş null'la karşılaştırılır ve tüm nesne eklenen olarak raporlanır). Düz `null` geçerli bir JSON belgesidir; iki null karşılaştırması sıfır eklenen/çıkarılan/değiştirilen ve bir değişmeyen verir. Her iki girdi de boşsa fark her yerde sıfır raporlar.

JSON'um herhangi bir yere gönderiliyor mu?

Hayır. Her iki metin alanı tarayıcınızda kalır; fark sayfayı render eden aynı JavaScript bağlamında çalışır. DevTools'taki Ağ sekmesi Karşılaştır'a bastığınızda hiçbir istek göstermez. Araç sayfa önbelleğe alındıktan sonra çevrimdışı çalışır.

Bunun metin satır farkından farkı nedir?

`diff a.json b.json` gibi metin farkı karakterler ve satır sonları üzerinde çalışır: aynı veriyi yeniden biçimlendirin, fark yansır. Bu YAPISAL bir farktır: `{"a":1, "b":2}` ve `{"b":2, "a":1}` özdeştir (sıfır fark). Ayrıca girinti, sondaki boşluk veya yorum stillerini umursamaz. Biçimlendirme önemliyse metin farkı kullanın; veri önemliyse bunu kullanın.