İçeriğe geç

JSON Karşılaştırma Aracı - Çevrimiçi JSON'u Ücretsiz Karşılaştırın | JSON Farkı

Hızlı JSON karşılaştırma aracımızla JSON'u çevrimiçi ücretsiz olarak karşılaştırın. Renk kodlu sonuçlarla farkları anında bulun. %100 güvenli, tarayıcı tabanlı JSON farkı. Kayıt gerekmez.

JSON Karşılaştırma Aracı

Yükleme hesaplayıcısı...
📚

Belgeler

Genellikle JSON diff aracı olarak adlandırılan bir JSON karşılaştırma aracı, iki JSON (JavaScript Object Notation) değerini karşılaştırır ve aralarındaki değişiklikleri bildirir. Eklenen, kaldırılan veya değiştirilen her özelliği ya da dizi öğesini, verideki tam konumuyla birlikte listeler. Bu sayfa, whiz.tools JSON karşılaştırma aracının gerçek karşılaştırma mantığına dayalı örneklerle nasıl çalıştığını açıklar.

JSON karşılaştırması nedir?

JSON karşılaştırması, farklılıkları bulmak için iki JSON belgesini birbiriyle denetleme işlemidir. JSON belgesi, süslü parantezler içinde anahtar-değer çiftleri bulunan nesnelerden, köşeli parantezler içinde sıralı listeler bulunan dizilerden ve dizeler, sayılar, boole değerleri ile null gibi ilkel değerlerden oluşan bir metin parçasıdır. Bu belgelerin her ikisini de gözle karşılaştırmak, birkaç satırı aştıklarında yavaş ve hataya açıktır; bu nedenle karşılaştırma aracı eşleştirmeyi otomatik olarak yapar ve her değişikliği vurgular.

Geliştiriciler bu tür bir karşılaştırmayı API yanıtlarını denetlemek, yapılandırma dosyalarındaki değişiklikleri izlemek, veri aktarımının bilgi kaybına yol açmadığını doğrulamak ve sürüm denetimindeki JSON dosyalarında yapılan değişiklikleri incelemek için kullanır.

Araç iki JSON değerini nasıl karşılaştırır?

Araç, her iki girdiyi standart bir JSON ayrıştırıcısıyla ayrıştırır, ardından ortaya çıkan iki değeri birlikte, her seferinde bir düzey ilerleyerek tarar. Her adımda sırasıyla üç soru sorar:

  1. İki değerin türleri farklı mı (örneğin biri nesne, diğeri sayı mı) veya biri null iken diğeri değil mi? Öyleyse o konumda bir değişiklik kaydeder ve daha derin karşılaştırmayı durdurur.
  2. Her iki değer de ilkel mi (dize, sayı, boolean veya null)? Öyleyse bunları doğrudan karşılaştırır. Sayı olan 123 değerinden dize olan "123" değerine geçiş de dahil olmak üzere her farklılık değişiklik sayılır.
  3. Her iki değer de nesne veya dizi mi? Öyleyse aşağıdaki kuralları kullanarak içeriklerini karşılaştırır ve iç içe nesne veya dizilerde yinelemeli olarak ilerler.

Her farklılık, özgün belgede bulunmasını kolaylaştırmak için user.address.city veya tags[1] gibi bir yol ile kaydedilir. Nesne üyeleri noktayla birleştirilir, dizi öğeleri ise köşeli parantez içinde dizinleriyle gösterilir. Bir dizinin nesneyle değiştirilmesi gibi belgenin en üst düzeyindeki bir farklılığın verinin içinde bir yolu yoktur; bu nedenle $ olarak etiketlenir. Bu, RFC 9535 tarafından tanımlanan JSONPath standardındaki kök tanımlayıcıdır ve belgenin tamamını ifade eder.

Nesneleri karşılaştırma

İki JSON nesnesi için araç, nesnelerden herhangi birinde bulunan tüm anahtarları toplar. Her anahtar için:

  • Anahtar yalnızca ikinci nesnede varsa bu, eklenmiş bir özelliktir.
  • Anahtar yalnızca ilk nesnede varsa bu, kaldırılmış bir özelliktir.
  • Anahtar her ikisinde de varsa araç iki değeri yinelemeli olarak karşılaştırır.

Anahtarların sırası önemli değildir. JSON standardı nesne üyeleri için bir sıra tanımlamaz; bu nedenle {"a":1,"b":2} ve {"b":2,"a":1} aynı kabul edilir.

Dizileri karşılaştırma

Diziler içeriklerine göre değil, konumlarına göre karşılaştırılır. Araç, her iki dizideki dizinleri sırayla ilerleterek, daha uzun dizinin uzunluğuna kadar her dizindeki karşılık gelen öğeleri karşılaştırır. Dizilerden biri daha kısaysa, daha uzun dizinin sonundaki ek öğeler eklenmiş veya kaldırılmış olarak bildirilir.

Bu nedenle araç, dizi öğelerini içeriklerine göre eşleştirmeye çalışmaz. Bir nesnenin 1 dizininden 2 dizinine "taşındığını" fark etmez; yalnızca her dizindeki değerin değiştiğini görür. Bir dizi ortasındaki öğenin silinmesi veya eklenmesi, sonraki tüm öğeleri bir konum kaydırır. Bu nedenle genellikle tek bir temiz ekleme ya da kaldırma yerine birkaç ayrı değişiklik olarak görünür.

Çözümlü örnek

Örnek 1: iki nesneyi karşılaştırma

İlk JSON:

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

İkinci JSON:

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

Sonuç:

  • Değiştirildi user.address.city: "New York" → "Boston"
  • Değiştirildi user.address.zip: "10001" → "02108"

Örnek 2: sonda bir dizi değişikliği

İlk JSON:

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

İkinci JSON:

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

0 dizini değişmemiş, 1 dizini değişmiş, 2 dizini değişmemiştir ve 3 dizini yalnızca ikinci dizide vardır. Sonuç:

  • Değiştirildi tags[1]: "urgent" → "critical"
  • Eklendi tags[3]: "documentation"

Örnek 3: bir dizinin ortasından öğe kaldırma

Bu örnek, yaygın bir karışıklık kaynağı olduğu için bir öğe bir dizinin ortasından kaldırıldığında ne olduğunu gösterir.

İlk JSON:

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

İkinci JSON; "Mouse" girdisi silinmiş ve sona "Monitor" girdisi eklenmiş durumda:

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

Buna bakan biri "Mouse kaldırıldı ve Monitor eklendi." derdi. Araç kesin olarak dizine göre karşılaştırdığı için durumu böyle görmez. 0 dizinini 0 diziniyle, 1 dizinini 1 diziniyle ve 2 dizinini 2 diziniyle karşılaştırır; böylece silinen öğeden sonraki her alan yanlış nesneyle eşleşir. Gerçek sonuç yedi değişikliktir:

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

Bunun gibi listeleri karşılaştırırken daha düzenli bir sonuç elde etmek için, yapıştırmadan önce her iki diziyi aynı şekilde sıralayın veya anahtarlandırın; örneğin her listeyi aynı sırada yazarak ya da karşılaştırmadan önce nesneleri bir kimlik alanına göre eşleştirerek.

Araç ne yapmaz?

  • Dizi öğelerini içeriklerine göre eşleştirmez. Yukarıda gösterildiği gibi yalnızca dizin konumuna göre karşılaştırır; bu nedenle bir öğenin değişmek yerine taşındığını anlayamaz.
  • Döngüsel başvuruları algılamaz. Uygulamada bu bir sınırlama değildir: Her iki girdi de her zaman düz bir ağaç oluşturan ve kendisine geri başvuran bir değer üretemeyen JSON.parse işlevinden gelir. Geçerli JSON metninde döngüsel başvurular zaten bulunamaz.
  • Karşılaştırmadan önce dizileri sıralayacak bir ayar sunmaz. Yukarıda açıklanan dizin kayması etkisinden kaçınmanın tek yolu, girdinizdeki öğeleri yapıştırmadan önce yeniden sıralamaktır.

Araç nasıl kullanılır?

  1. İlk JSON belgesini sol kutuya, ikincisini sağ kutuya yapıştırın.
  2. Her iki kutuda da metin bulunduğunda araç bunları otomatik olarak karşılaştırır; isterseniz karşılaştırmayı elle çalıştırmak için Compare düğmesine tıklayın.
  3. Sonuç listesini okuyun. Her satır user.age gibi bir yol ile bunun eklenmiş, kaldırılmış veya değiştirilmiş olduğunu ve eski ve yeni değerlerin yan yana gösterimini içerir.
  4. Sonuçları düz metin olarak kopyalamak için Copy'ye tıklayın.

Bir kutu geçerli JSON olmayan metin içeriyorsa araç karşılaştırma yerine o kutunun altında bir hata gösterir. Her iki kutu da geçersiz olduğunda iki hata aynı anda görünür.

Sık sorulan sorular

İki JSON değeri arasındaki fark ne sayılır? Bir özellik veya dizi öğesi iki belgeden yalnızca birinde varsa ya da her ikisinde bulunmasına rağmen farklı bir değer veya farklı bir tür taşıyorsa farklıdır. Bir değerin sayı olan 5 değerinden dize olan "5" değerine değiştirilmesi, benzer görünseler bile değişiklik sayılır.

Öğelerin sırası önemli midir? Kapsayıcıya bağlıdır. JSON nesnelerinde üye sırası tanımlı değildir; bu nedenle aynı anahtarlara ve değerlere farklı sırada sahip iki nesne aynı kabul edilir. Diziler sıralıdır ve araç bunları dizin konumuna göre karşılaştırır; dolayısıyla bir öğenin farklı bir konuma taşınması, taşıma olarak değil, bir dizi değişiklik olarak bildirilir.

$ sonuç yolu ne anlama gelir? Belgenin tek bir bölümünün değil, tamamının değiştiği anlamına gelir. Bu durum, en üst düzeydeki iki girdinin farklı türde değerler olmasıyla ortaya çıkar; örneğin bir tarafta dizi, diğer tarafta nesne bulunması veya düz sayılar olan 1 ve 2. $, RFC 9535 tarafından tanımlanan JSONPath standardındaki kök tanımlayıcıdır.

JSON verilerim bir sunucuya gönderiliyor mu? Hayır. Karşılaştırma JavaScript kullanılarak tarayıcıda yapılır. Hiçbir şey yüklenmez.

Girintileme veya küçültme gibi biçimlendirme sonucu etkiler mi? Hayır. Her iki girdi de karşılaştırmadan önce JSON değerlerine ayrıştırılır; bu nedenle boşluklar, girintileme ve satır sonları fark yaratmaz. Yalnızca gerçek veriler karşılaştırılır.

Araç, yorum veya sondaki virgül içeren JSON'u karşılaştırabilir mi? Hayır. RFC 8259 ile tanımlanan standart JSON, yorumlara veya sondaki virgüllere izin vermez. Bunları içeren girdiler geçersiz olarak reddedilir.

Kaynaklar

  1. IETF. "JavaScript Object Notation (JSON) Veri Değişim Biçimi." RFC 8259, Aralık 2017.
  2. IETF. "JavaScript Object Notation (JSON) Yaması." RFC 6902, Nisan 2013.
  3. IETF. "JSONPath: JSON için Sorgu İfadeleri." RFC 9535, Şubat 2024. (Bölüm 2,2, kök tanımlayıcıyı $ tanımlar.)
  4. Mozilla Geliştirici Ağı. "JSON.parse()."