Skip to content

JSON Diff Karşılaştır

Tarayıcınızda iki JSON dosyasını anında karşılaştırın. Yan yana vurgulama, RFC 6902 JSON Patch çıktısı, zaman damgaları ve kimlikler gibi gürültülü alanları yoksayma. %100 gizli, yükleme yok.

Takip Yok Tarayıcıda Çalışır Ücretsiz
Yoksay yolları:
Gelişmiş Seçenekler
Dizi modu
Reviewed for RFC 6902/6901 compliance and edge cases including null vs missing keys, type drift, floating-point precision, and array key alignment. — Go Tools API Tooling Team · May 4, 2026

JSON Diff Nedir?

JSON Diff, JSON'un veri modelini dikkate alan iki JSON belgesinin yapısal karşılaştırmasıdır — anahtarlar sırasızdır, türler katıdır ve diziler sıralı ya da anahtarlı olabilir. Anahtar yeniden sıralamayı veya boşlukları fark olarak raporlayan metin diffinin aksine JSON diff, anlam açısından anlamlı sonuçlar üretir.

Kanonik makine tarafından okunabilir biçim, bir belgeyi diğerine dönüştüren sıralı bir ops dizisi (add, remove, replace, move, copy, test) olan JSON Patch (RFC 6902)'dir. Yollar JSON Pointer (RFC 6901) kullanır. Yakından ilişkili: JSON Merge Patch (RFC 7396) — daha basit ama 'anahtarı kaldır' ile 'anahtarı null yap' arasındaki farkı temsil edemez. Bu araç RFC 6902 çıktısı üretir.

JavaScript'te JSON üzerinde derin eşitlik göründüğünden zordur. JSON.stringify(a) === JSON.stringify(b) anahtar yeniden sıralamada başarısız olur; -0 ile 0 üzerinde yanıltır (ikisi de "0" olarak dizeleştirilir). Doğru bir diff, her iki ağacı anahtar kümesi birleşimini kullanarak paralel olarak gezmeli, null ile eksik arasındaki farkı 'in' operatörüyle ayırt etmeli ve sayılar için 'eşit' ne anlama gelir sorusuna yanıt vermelidir (varsayılan Object.is, tolerans için epsilon).

Bu araç tamamen tarayıcınızda çalışır. Girişler makinenizden asla çıkmaz. API yanıtları, iç şemalar ve özel yapılandırmalar için güvenlidir.

Bitişik JSON araçlarıyla mı çalışıyorsunuz? JSON Biçimlendirici ile biçimlendirin; JSON to YAML ve YAML to JSON ile dönüştürün.

// Two JSON documents that look different but are semantically equal
const a = '{"a":1,"b":2}';
const b = '{"b":2,"a":1}';

// Naive comparison — wrong
JSON.stringify(JSON.parse(a)) === JSON.stringify(JSON.parse(b));
// → false (key order differs)

// JSON Diff (this tool) — correct: key order is irrelevant
// → 0 differences

// JSON Patch (RFC 6902) for { "a": 1 } → { "a": 2 }
// [{ "op": "replace", "path": "/a", "value": 2 }]

Temel Özellikler

Yan Yana + JSON Patch

Tek diff'ten iki görünüm: inceleme için görsel vurgulama, otomasyon için RFC 6902 patch.

Gürültülü Alanları Yoksay

Tek tıkla ön ayarlar /createdAt, /updatedAt, /*Id, /*At, requestId, traceId alanlarını çıkarır. Özel Extended JSON Pointer kalıpları desteklenir.

Dizileri Anahtarla Eşleştir

Nesneler dizisini indeks yerine id alanına göre karşılaştırın — K8s ortamları, package-lock girişleri veya mantıksal olarak sırasız listeler için.

Varsayılan Olarak Tür Katı

1 ≠ "1". null ≠ eksik. Arka uç serileştirme kaymasını test fixture'a düştüğü anda yakalayın.

%100 Tarayıcı Tabanlı

Girişler makinenizden asla çıkmaz. Yükleme yok, JSON'un localStorage'a kaydedilmesi yok, yapıştırdıklarınız üzerinde analitik yok.

Veriyi Değil Bağlantıyı Paylaşın

Paylaşım Bağlantısı yalnızca yapılandırmanızı URL'ye yazar. JSON girişleriniz yerel kalır.

Örnekler

API Yanıt Regresyonu

{"user":{"id":1,"name":"Ada","createdAt":"2024-01-01"}}
{"user":{"id":1,"name":"Ada Lovelace","createdAt":"2024-02-02"}}

İki değişiklik (name + createdAt). Yoksay yollarına /user/createdAt ekleyin; yalnızca isim değişikliği kalır.

Yapılandırma Dosyası Denetimi (Anahtar Yeniden Sıralama)

{"a":1,"b":2,"c":3}
{"c":3,"a":1,"b":2}

Aynı veri, farklı anahtar sırası. JSON Diff anahtar sırasını anlam bakımından önemsiz sayar — diff boş çıkar.

Nesne Dizisi (Anahtarla Eşleştirme)

[{"id":1,"qty":3},{"id":2,"qty":5}]
[{"id":2,"qty":5},{"id":1,"qty":4}]

Dizi modunu 'Anahtarla eşleştir' olarak değiştirin ve key=id girin. Hizalama olmadan her eleman değişmiş görünür; hizalamayla yalnızca id=1 elemanındaki qty değişir.

JSON Patch Çıktısı (RFC 6902)

{"items":[{"id":1,"price":29.99}]}
{"items":[{"id":1,"price":24.99}]}

JSON Patch sekmesine geçerek fast-json-patch ile uygulayabileceğiniz [{"op":"replace","path":"/items/0/price","value":24.99}] çıktısını alın.

Nasıl Kullanılır

  1. 1

    Her iki JSON belgesini yapıştırın

    Orijinal (sol) ve değiştirilmiş (sağ) JSON'u yapıştırın. Canlı diff siz yazarken oluşturulur; büyük girişlerde (>200 KB) manuel Diff düğmesine geçilir.

  2. 2

    Gürültüyü filtreleyin

    Bir ön ayara (Zaman Damgaları / Kimlikler / İz) tıklayın veya Yoksay yollarına Extended JSON Pointer kalıpları yapıştırarak ilgisiz alanları çıkarın.

  3. 3

    İhtiyacınız olan görünümü seçin

    İnsan incelemesi için Yan Yana, makine uygulanabilir işlemler için JSON Patch (RFC 6902). Yapılandırmayı bir takım arkadaşıyla paylaşmak için Paylaşım Bağlantısı'nı kullanın.

Yaygın Diff Hataları

Anahtar Sırası Gürültüsü (Metin Diff Belirtisi)

Diff aracınız {"a":1,"b":2} ile {"b":2,"a":1}'i farklı olarak raporluyorsa, JSON diff değil satır diff yapıyordur. JSON anahtarları sırasızdır — bu araç anahtar sırasını otomatik olarak yoksayar.

✗ Yanlış
diff a.json b.json   # text diff: 'everything changed'
✓ Doğru
JSON Diff (this tool): 0 differences

Null ile Eksik Karışıklığı

{"a":null} ile {} aynı değildir. Bunları eşit kabul etmek gerçek arka uç hatalarını gizler.

✗ Yanlış
{"a": null} == {}   # collapsed by some tools
✓ Doğru
{"a": null} ≠ {}     # type-strict diff

Anahtar Hizalaması Olmadan Dizi Sırası

[{id:1},{id:2}] ile [{id:2},{id:1}] mantıksal bir küme için 'iki değişiklik' değildir. Sıralı mod bunu öyle raporlar; Anahtarla Eşleştir'e geçin.

✗ Yanlış
Sequential diff: 4 modified
✓ Doğru
Match by key (id): 0 differences

Tür Kayması (Sayı ile Dize)

Arka uçlar bazen kimlikleri tutarsız serileştirir — 42 ile "42". Araç bunları 'tür' değişiklikleri olarak işaretler; böylece kaymaları erkenden fark edebilirsiniz.

✗ Yanlış
{"id": 42} vs {"id": "42"}   # serialization bug
✓ Doğru
Diff reports 'modified (type)' with both values

Kayan Nokta Hassasiyeti

IEEE 754'te 0.1 + 0.2 !== 0.3. tolerans=0 (varsayılan) ile bu işaretlenir. Sayısal eşdeğerlik istiyorsanız toleransı 1e-9 olarak ayarlayın.

✗ Yanlış
tolerance=0:  0.30000000000000004 ≠ 0.3
✓ Doğru
tolerance=1e-9: equal

Zaman Damgası ve UUID Gürültüsü

createdAt, updatedAt, requestId, traceId her istekte değişir. Bunları çıkarmak için Yoksay yolları ön ayarlarını kullanın.

✗ Yanlış
Diff: 47 modifications (45 are timestamps)
✓ Doğru
Add /createdAt, /updatedAt, /requestId to Ignore paths → 2 real changes

Yaygın Kullanım Senaryoları

API Yanıt Regresyonu
Hazırlık ile üretim yanıtlarını karşılaştırın; yalnızca anlamlı veri yükü değişikliklerini ortaya çıkarmak için zaman damgalarını ve istek kimliklerini yoksayın.
CI Anlık Görüntü Test Hataları
Başarısız bir Jest/Vitest anlık görüntüsündeki gerçek ile beklenen değerleri yapıştırın. Gürültüyü filtreleyin ve gerçek değişikliği saniyeler içinde bulun.
package-lock / yarn.lock Çakışmaları
Bağımlılıkları ada göre hizalayarak birleştirme çakışmalarını çözün; anahtar sırası ve ilgisiz alanlar gürültü olmaktan çıkar.
K8s / Helm Değerleri Denetimi
Ortamları, volumeMounts ve portları ada göre eşleştirin. Kasıtsız sıralama değişikliklerini gerçek yapılandırma düzenlemelerinden ayırt edin.
i18n Çeviri Kapsamı
en.json ile zh.json'u yapısal olarak karşılaştırarak değer gürültüsü olmadan eksik veya fazla çeviri anahtarlarını bulun.
Terraform / CDK Plan İncelemesi
Plan çıktısını farklı çalıştırmalar arasında karşılaştırın; sayısal tolerans kayan nokta aritmetiğini dengeler, yoksay yolları ARN'leri ve zaman damgalarını çıkarır.

Teknik Detaylar

RFC 6902 Uyumlu Patch Çıktısı
RFC 6901 yollarıyla geçerli JSON Patch işlemleri (add/remove/replace) üretir. fast-json-patch@3.x ve rfc6902 npm paketlerine karşı doğrulanmıştır.
Yinelemeli Geçiş
Açık yığın geçişi (özyineleme yok), olumsuz girişlerde yığın taşmasını önlemek için 100.000 düğüm ve 64 derinlikle sınırlıdır.
Object.is Sayısal Eşitlik
Varsayılan sayısal tolerans 0'dır — Object.is kullanır, bu nedenle -0 ile +0 ayırt edilir. Epsilon tabanlı eşitlik için toleransı 0'ın üzerine ayarlayın.

En İyi Uygulamalar

İncelemeden Önce Filtreleyin
Önce Yoksay yollarını ekleyin (zaman damgaları, kimlikler, iz alanları), sonra diff'i okuyun. Gürültülü diff'leri incelemek, gözü gerçek değişiklikleri atlamaya alıştırır.
Mantıksal Kümeler için Anahtarla Eşleştir
Diziniz sırasız bir kümeyi temsil ediyorsa (ortamlar, kullanıcılar, bağımlılıklar) Anahtarla Eşleştir kullanın. Mantıksal kümelerde sıralı diff neredeyse her zaman yanlıştır.
Girişleri Değil Bağlantıyı Paylaşın
Bir meslektaşınıza filtre yapılandırmanızı göndermek için Paylaşım Bağlantısı'nı kullanın — hassas JSON'u paylaşılan belgelere asla yapıştırmayın. URL yalnızca yapılandırmayı içerir.

Sık Sorulan Sorular

Yalnızca bir alan değiştirdiğimde neden diff'im her şeyin değiştiğini gösteriyor?
Üç yaygın neden: (1) farklı anahtar sırası — JSON Diff anahtar sırasını eşdeğer kabul eder ama metin diff araçları kabul etmez; (2) her istekte değişen zaman damgaları/UUID'ler/otomatik kimlikler — bunları Yoksay yollarına ekleyin; (3) dizi sırası, sıra bazlı karşılaştırmanın uygun olmadığı durumlar — Dizi modunu 'Anahtarla eşleştir' olarak değiştirin.
JSON diff'te zaman damgalarını ve kimlikleri nasıl yoksayarım?
Yukarıdaki Yoksay yolları giriş alanını kullanın. /createdAt, /updatedAt, /*Id, /*At, /requestId gibi alanları tek tıkla filtrelemek için 'Zaman Damgaları' veya 'Kimlikler' ön ayarına tıklayın. Gelişmiş filtreleme için satır başına bir tane olacak şekilde kendi Extended JSON Pointer kalıplarınızı da yapıştırabilirsiniz.
JSON Patch ile görsel diff arasındaki fark nedir?
Görsel (yan yana) diff insanlar içindir — değişiklikleri gözle incelersiniz. JSON Patch (RFC 6902) makineler içindir — fast-json-patch veya rfc6902 npm paketleriyle uygulayabileceğiniz yapılandırılmış bir ops dizisi (add/remove/replace). Aynı diff, iki farklı çıktı.
JSON diff, null ile eksik anahtarları aynı kabul eder mi?
Hayır. {"a":null} ile {} farklıdır — birincisinde açık bir null var, ikincisinde anahtar hiç yok. Gerçek sistemler bu ikisine farklı davranır; bu araç ikisini ayrı tutar.
Diziler indeksle mi anahtarla mı karşılaştırılır?
Varsayılan olarak indeksle (Sıralı). 'Anahtarla eşleştir' moduna geçip bir anahtar alan (genellikle id) girerek sıralamadan bağımsız şekilde elemanları hizalayabilirsiniz. K8s ortamları, package-lock girişleri veya mantıksal olarak küme niteliği taşıyan listelerde kullanın.
Diff'i RFC 6902 JSON Patch olarak dışa aktarabilir miyim?
Evet. JSON Patch sekmesi geçerli bir RFC 6902 ops dizisi üretir. Yoksay yolları ayarlanmışsa patch filtrelenir (sekmede '(filtrelendi: N yoksayılan yol dahil değil)' gösterilir) ve orijinal belgeler tam olarak geri oluşturulamaz. Tam patch için Yoksay yollarını temizleyin.
JSON Patch ile JSON Merge Patch (RFC 7396) aynı şey midir?
Hayır. RFC 6902 (JSON Patch) sıralı bir ops dizisidir — açık ve geri alınabilir. RFC 7396 (Merge Patch) tek bir birleştirme belgesidir — daha basit ama null atamayı silme işleminden ayırt edemez. JSON Diff, RFC 6902 çıktısı üretir.
Büyük JSON dosyalarını (>10 MB) nasıl karşılaştırabilirim?
~5 MB'ın üzerindeki dosyalar pratik tarayıcı belleğini aşar. 200 KB üzerinde canlı mod devre dışı kalır; çok megabaytlık dosyalar için komut satırından jq veya Node'da fast-json-patch kullanın.
Araç JSON'umu sunucuya gönderiyor mu?
Hayır. Tüm karşılaştırma tarayıcınızda yerel olarak çalışır. Girişler hiçbir zaman diske, ağa, localStorage'a veya URL parametrelerine yazılmaz. Sayfayı yenilemek verileri siler. Paylaşım Bağlantısı düğmesi yalnızca yapılandırmanızı (Dizi modu, Yoksay yolları) yazar — verilerinizi asla yazmaz.
Diff'te neden 42 ile "42" farklı görünüyor?
JSON Diff tür açısından katıdır: sayı 42 ile dize "42" eşit değildir. Bu, arka uç serileştirme kaymasını yakalar (bazı uç noktalar sayısal kimlik döndürür, bazıları dize döndürür) — diff bunu 'tür' değişikliği olarak etiketler.
Yorumlu JSON (JSONC) veya sondaki virgüllü JSON ile diff yapabilir miyim?
Standart JSON (RFC 8259) yorum ve sondaki virgüllere izin vermez. Bu araç yerel JSON.parse kullanır ve ikisini de reddeder. Yorumları önce JSON Biçimlendirici ile temizleyin.
id gibi bir anahtar kullanarak iç içe nesne dizilerini nasıl karşılaştırırım?
Dizi modunu 'Anahtarla eşleştir' olarak ayarlayın ve id girin. Diff, id değerlerine göre hizalar. v1 aynı anahtar alanını her dizi derinliğinde uygular; o alana sahip olmayan iç diziler sıralıya geri döner ve bir uyarı gösterir.
Diff kayan nokta hassasiyetini (0.1 + 0.2) ele alıyor mu?
Evet, Sayısal toleransla. Varsayılan tolerans Object.is ile 0'dır — bu nedenle -0 ile +0 işaretlenir. Toleransı küçük bir epsilon değerine ayarlarsanız (ör. 1e-9) 0.1 + 0.2, 0.3'e eşit kabul edilir. Tolerans yalnızca sayısal yapraklar için geçerlidir.