JSON Karşılaştırma (JSON Diff)

İki JSON belgesini satır satır değil, yapı olarak karşılaştır. Fark anahtar yoluyla gösterilir, dizi öğeleri kimlik alanına göre eşleştirilebilir, sonuç RFC 6902 JSON Patch olarak indirilebilir. Yapıştırdığın belgeler tarayıcından çıkmaz.

İlk belge

İkinci belge

Dizi eşleştirme
0 Eklenen
0 Silinen
0 Değeri değişen
0 Tipi değişen
0 Yer değiştiren
0 Aynı kalan

Fark ağacı

Satırın sağındaki anahtar yoluna tıklayarak yolu panoya kopyalayabilirsin.

JSON Patch (RFC 6902)

[]

JSON karşılaştırma nasıl yapılır?

  1. İki belgeyi yan yana koy

    Karşılaştıracağın JSON belgelerini soldaki ve sağdaki kutuya yapıştır. Dosyaları doğrudan kutuların üzerine de sürükleyebilirsin; hiçbiri sunucuya yüklenmez.

  2. Dizilerin nasıl eşleşeceğini seç

    Sırası anlamlı olan diziler için sıraya göre eşleştir. Kayıt listelerinde anahtara göre eşleştirmeyi aç: öğeler id gibi bir kimlik alanıyla eşlenir, yer değiştirme fark sayılmaz.

  3. Farkı ağaçta oku

    Eklenen, silinen, değeri değişen ve tipi değişen her düğüm ayrı renkle çıkar. Her satırın sonundaki anahtar yolunu tek tıkla kopyalayabilirsin.

  4. Sonucu JSON Patch olarak al

    RFC 6902 biçimindeki çıktıyı kopyala ya da indir. Araç patch’i ilk belgeye uygulayıp ikinci belgeyi verdiğini ayrıca doğrular.

Metin karşılaştırmadan farkı ne?

Bir metin karşılaştırıcısı satırlara bakar. Aynı JSON belgesini yeniden yazan bir araç anahtarların sırasını değiştirdiyse ya da girintiyi iki boşluktan dörde çıkardıysa, satır bazlı diff dosyanın yarısını değişmiş gösterir; hiçbir değer değişmemiş olsa bile.

Bu araç önce belgeyi okur, sonra yapıyı karşılaştırır. Nesne, anahtar kümesidir: sıra bir fark değildir. Dizi, öğe sırasıdır: yer değiştirme ayrı bir durumdur, hem de istersen kimlik alanına göre eşleştirilerek. Sonuçta gördüğün her satır gerçekten değişmiş bir değerdir ve nerede olduğu satır numarasıyla değil, anahtar yoluyla yazar.

Karşılaştıracağın şey JSON değilse satır bazlı karşılaştırma hâlâ doğru araçtır: metin ve kod karşılaştırma sayfası satır, kelime ve karakter düzeyinde çalışır ve unified diff üretir.

Metin ve Kod Karşılaştırma

Satır, kelime ve karakter düzeyinde diff; unified diff çıktısı.

Diziler: sıraya göre mi, anahtara göre mi?

JSON karşılaştırmasında asıl zor kısım dizilerdir. Bir API listesini iki kez çektiğinde kayıtlar aynı olabilir ama sırası değişmiş olabilir. Sıraya göre karşılaştıran bir araç bunu baştan sona değişmiş gösterir; gerçekte hiçbir kayıt değişmemiştir.

Eşleştirme Ne yapar? Ne zaman kullanmalı?
Sıraya göre Öğeleri konumlarına göre eşleştirir; araya giren ya da çıkan öğeyi bularak kalanın kaymasını engeller. Sırası anlamlı olan diziler: adımlar, öncelik listeleri, zaman serileri.
Anahtara göre Nesneleri kimlik alanına göre eşleştirir. Bir kayıt listenin başına taşınmışsa silinip eklenmiş değil, yer değiştirmiş sayılır. Kayıt listeleri: kullanıcılar, ürünler, olaylar. Kimlik alanını yazmazsan araç id, uuid, key gibi alanları kendi dener.
Sırayı yoksay Aynı öğeleri nerede olurlarsa olsunlar eşleştirir, geri kalanı sırayla karşılaştırır. Sırası tesadüfi olan diziler: etiketler, yetkiler, kümeler.

JSON Patch nedir, ne işe yarar?

JSON Patch, RFC 6902 ile tanımlanan bir biçimdir: bir belgeyi başka bir belgeye çeviren işlemlerin listesi. Kendisi de JSON olduğu için bir isteğin gövdesinde taşınabilir, bir kayda yazılabilir, sürüm geçmişinde saklanabilir. Her işlem hedefini JSON Pointer ile gösterir.

Bu araç farkı bulduktan sonra patch’i yazar, sonra da kendi yazdığını ilk belgeye uygular ve sonucun ikinci belge olup olmadığını kontrol eder. Sonucu panelin üstünde okursun; yani doğru olduğunu iddia etmez, sınar.

İşlem Anlamı
addYeni bir anahtar ya da dizi öğesi ekler.
removeVar olan bir anahtarı ya da dizi öğesini siler.
replaceVar olan bir değeri yenisiyle değiştirir.
moveBir değeri bulunduğu yerden alıp başka bir yere koyar; dizideki yer değiştirmeler böyle yazılır.

JSON karşılaştırmasında en sık yanılınan beş nokta

Değer çifti Doğrusu
1 / 1.0 JSON tarafında ikisi de aynı sayıdır; fark yazımdadır, değerde değil. Bu araç fark göstermez.
1 / "1" Biri sayı, diğeri metindir; bu bir tip değişimidir ve ayrı renkle gösterilir. Ayrımı önemsemiyorsan tip toleransını aç.
null / eksik anahtar Anahtarın null olması ile hiç olmaması aynı şey değildir. Biri silinme, diğeri değer değişimidir; araç ikisini ayırır.
{} / [] Boş nesne ile boş dizi farklı tiplerdir. Çoğu metin karşılaştırıcısı bunu tek karakterlik bir fark gibi gösterir; burada tip değişimi olarak çıkar.
Tekrarlanan anahtar Aynı nesnede iki kez geçen anahtar geçerli JSON sayılır ve okuyucular sonuncusunu alır. Araç bunu okur, ama sessizce yutmaz: hangi satırda tekrarlandığını söyler.

Öne çıkan özellikler

Yapısal karşılaştırma

Satır değil, değer karşılaştırılır. Yeniden biçimlendirilmiş ya da anahtarları başka sırada yazılmış bir belge fark üretmez.

Diziyi kimlikle eşleştir

Kayıt listelerini id gibi bir alana göre eşleştir; sırası değişmiş kayıt silinip eklenmiş görünmez, yer değiştirmiş görünür.

Her farkın anahtar yolu

Her satır kendi yolunu taşır. Tek tıkla kopyalar, koda ya da hata kaydına doğrudan yapıştırırsın.

Kendini sınayan patch

RFC 6902 çıktısı üretilir, ilk belgeye uygulanır ve ikinci belgeyi verip vermediği kontrol edilir. Sonucu ekranda görürsün.

Hatayı yeriyle söyler

Geçersiz JSON’da satır ve sütun verilir; tekrarlanan anahtarlar da ayrıca uyarı olarak listelenir.

Belgen sunucuya gitmez

Okuma, karşılaştırma ve patch üretimi tarayıcında çalışır. Yapıştırdığın yapılandırma ya da API yanıtı hiçbir yere gönderilmez.

Sıkça Sorulan Sorular

İki belgeyi soldaki ve sağdaki kutuya yapıştır ya da dosyaları kutuların üzerine sürükle. Karşılaştırma sen yazarken çalışır; fark ağacında eklenen, silinen, değeri değişen ve tipi değişen her düğüm ayrı renkle ve kendi anahtar yoluyla gösterilir. Belgeler tarayıcıdan çıkmaz, sunucuya yüklenmez.

Metin karşılaştırıcısı satırlara bakar. Bir belgeyi yeniden biçimlendirmek, girintiyi değiştirmek ya da anahtarları başka sırada yazmak satır bazlı diff'te yüzlerce fark üretir; oysa tek bir değer bile değişmemiştir. Yapısal karşılaştırma belgeyi önce okur: nesneyi anahtar kümesi, diziyi öğe dizisi olarak görür. Sonuçta yalnızca gerçekten değişen değerler listelenir.

Hayır. JSON standardında bir nesnenin anahtarları sırasızdır; {"a":1,"b":2} ile {"b":2,"a":1} aynı nesnedir. Bu araç ikisi arasında fark göstermez, ama yalnızca sıranın değiştiğini fark ederse bunu ayrıca söyler; böylece yeniden yazılmış bir dosyada başka bir şeyin değişmediğinden emin olursun.

Varsayılan olarak evet, ama araya giren veya çıkan öğeler bulunarak; böylece listenin başına bir kayıt eklendiğinde geri kalan her şey değişmiş görünmez. Kayıt listelerinde “Anahtara göre” seçeneğini aç: öğeler id, uuid, key gibi bir kimlik alanına göre eşleştirilir. O zaman listenin başına taşınan bir kayıt silinip eklenmiş değil, yer değiştirmiş olarak görünür. Kimlik alanının adını kendin de yazabilirsin.

Çünkü JSON'da biri sayı, diğeri metindir ve bunları tüketen kodun çoğu için bu ciddi bir fark: bir API sürümünde sayı dönen alan diğerinde metne dönmüşse, karşılaştırmanın bunu göstermesi gerekir. Ayrımı önemsemiyorsan “Sayı ve metni aynı say” seçeneğini açabilirsin; bu durumda araç patch'in artık birebir hedef belgeyi üretmediğini de söyler.

Değil, ve bu araç ikisini ayırır. Bir anahtarın değeri null ise anahtar vardır ve değeri boştur; anahtar hiç yoksa alan tanımlı değildir. Üretilen JSON Patch'te de bu ayrım korunur: birinde replace, diğerinde remove ya da add işlemi çıkar.

JSON Patch, bir belgeyi diğerine çeviren işlemlerin listesidir ve kendisi de JSON'dur. Bir HTTP isteğinin gövdesinde gönderebilir, denetim kaydına yazabilir, iki yapılandırma sürümü arasındaki değişikliği sürüm geçmişinde saklayabilirsin. Bu araç patch'i üretir, ardından ilk belgeye uygular ve sonucun ikinci belge olup olmadığını sınayıp sonucu ekranda yazar.

Standart bunu yasaklamaz; okuyucuların çoğu son değeri alır, bazıları ilkini. Yani belge sessizce farklı yorumlanabilir. Bu araç belgeyi kabul eder ama tekrarı yutmaz: tekrarlanan anahtarı, satır numarasıyla birlikte uyarı olarak gösterir.

Karşılaştırma durur ve o kutunun altında hatanın nedeni satır ve sütun numarasıyla yazılır: kapanmamış parantez, fazladan virgül, tek tırnak, tırnaksız anahtar, geçersiz sayı gibi durumlar ayrı ayrı adlandırılır. Tarayıcının kendi hata mesajı yerine, nerede ne beklendiğini söyleyen bir cümle görürsün.

Hayır. Okuma, karşılaştırma ve patch üretimi dahil her şey tarayıcında çalışır; belgeler ne yüklenir ne saklanır. Bu yüzden üretim yapılandırmaları, müşteri verisi içeren API yanıtları ve kişisel kayıtlar için de kullanılabilir.

Kolayca hayalindeki işe kavuş!

Şimdi Kayıt Ol
Kolayca Üye Ol
Yazılım Bilgini Göster
Teklifleri Değerlendir