Skip to content

JSON Schema Doğrulayıcı

JSON verilerinizi herhangi bir JSON Schema'ya karşı tarayıcınızda anında doğrulayın. Draft 2020-12, 2019-09 ve Draft-07 desteği, tam yollu hata mesajları. %100 gizli — yükleme yok, hesap yok, ücretsiz.

Takip Yok Tarayıcıda Çalışır Ücretsiz
Hem JSON verisini hem schema'yı yapıştırın
Tür koerziyonu sınır durumları, format sözlüğü, $ref çözümü ve JSON Pointer hata yolları dahil Draft 2020-12, 2019-09 ve Draft-07 uyumluluğu için incelendi. — Go Tools API Tooling Team · May 7, 2026

JSON Schema Doğrulayıcı Nedir?

JSON Schema doğrulayıcısı, iki JSON belgesi alan — bir veri belgesi ve bir schema belgesi — ve verinin schema'nın sözleşmesine uyup uymadığını raporlayan bir programdır. Schema, sabit bir kelime dağarcığı (type, properties, required, items, enum, oneOf, allOf, $ref, format) kullanarak alan türlerini, required anahtarları, değer aralıklarını, izin verilen enum değerlerini, regex desenlerini ve yapısal kuralları bildirir. Doğrulayıcı her iki belgeyi paralel gezer ve sıfır veya daha fazla hata yayınlar; her biri verinin içindeki bir JSON Pointer yoluna iliştirilmiştir.

Doğrulama runtime'da, güvenilmeyen giriş ile kodunuz arasındaki sınırda çalışır. TypeScript türleri derleme zamanında yok olur ve bir webhook'tan, üçüncü taraf API'den veya kullanıcının yapıştırdığı içerikten gelen JSON ile yardım edemez — JSON Schema tam da bu boşluğu doldurur. Bunu TypeScript ile (veya Python'da Pydantic ile) eşleştirin; kod tabanınızın içinde derleme zamanı, sınırda runtime garantileri elde edersiniz.

Draft 2020-12 mevcut spektir ve 2026'da yeni projeler için seçmeniz gerekendir. Daha eski draft'lar (2019-09, Draft-07, Draft-06, Draft-04) legacy kod tabanlarında yaşar — Draft-07 hâlâ Helm chart'larında, VS Code ayarlarında ve eski Ajv yapılandırmalarında yaygındır. OpenAPI 3.1 Draft 2020-12'yi doğal olarak kullanır; OpenAPI 3.0 bir Draft 4 alt kümesi kullanır.

Bu araç tamamen tarayıcınızda çalışır. JSON'unuz, schema'nız ve doğrulama çıktısı makinenizden asla çıkmaz — tescilli API sözleşmeleri ve hassas payload'lar için güvenlidir. Dahili $ref işaretçileri otomatik çözülür; harici HTTP ref'leri gizliliği korumak için tasarımdan itibaren devre dışıdır.

Bitişik JSON araçlarıyla mı çalışıyorsunuz? Yapıştırmadan önce JSON Biçimlendirici ile biçimlendirin; iki JSON belgesini JSON Diff ile karşılaştırın; JSON to YAML ve YAML to JSON ile dönüştürün. Node, Python ve tarayıcıda uçtan uca doğrulama için JSON Schema doğrulama rehberimize bakın.

// A 5-line schema that catches three real bugs
const schema = {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id":    { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age":   { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
};

// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
//   /id   → type: expected integer, got string
//   /email → required: missing
//   /age   → maximum: 200 > 150

// In Node:        new Ajv().compile(schema)(bad)  // false; ajv.errors has the paths
// In Python:      jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install

Temel Özellikler

Çoklu Draft Desteği

Draft 2020-12 (varsayılan), 2019-09 ve Draft-07. Schema'nın $schema URI'sinden draft'ı otomatik algılar; URI olmayan schema'lar için yedek seçici sunar.

Tam Yollu Hatalar

Her hata bir JSON Pointer (örn. /user/email/0), başarısız keyword (type, required, pattern) ve tek satırlık bir mesaj içerir. Konuma atlamak için tıklayın.

Canlı Doğrulama

Yazdıkça doğrular. Hatalar gerçek zamanlı güncellenir; böylece Doğrula düğmelerine gidip gelmeden schema veya veri üzerinde hızla iterasyon yaparsınız.

format Keyword Kapsamı

email, uri, uuid, date, date-time, ipv4, ipv6, hostname, regex — gerçekten kullandığınız formatlar, savaşta sınanmış desenlerle doğrulanır.

%100 Tarayıcı Tabanlı

Girişler makinenizden asla çıkmaz. Yükleme yok, yapıştırdıklarınız üzerinde analitik yok, JSON'un localStorage'a kaydedilmesi yok. Tescilli sözleşmeler ve hassas payload'lar için güvenlidir.

Tek Tıkla Örnek Schema'lar

Yüklenebilir ön ayarlar (kayıt formu, webhook zarfı, yapılandırma dosyası, sipariş dizisi) sizi beş saniyenin altında çalışan bir doğrulamaya getirir.

Örnekler

Geçerli Nesne — required + türler

{
  "id": 42,
  "email": "alice@example.com",
  "age": 30
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": { "type": "integer", "minimum": 1 },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 }
  },
  "required": ["id", "email"],
  "additionalProperties": false
}

Schema id ve email alanlarını required olarak tanımlar ve türleri sabitler. Yukarıdaki veri geçer — her kısıt karşılanır. email'i kaldırın veya id'yi string'e çevirin; tam yollu hataları görürsünüz.

Geçersiz — eksik required + yanlış tür

{
  "id": "42",
  "age": 200
}
{
  "type": "object",
  "properties": {
    "id": { "type": "integer" },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "maximum": 150 }
  },
  "required": ["id", "email"]
}

Üç hata: /id integer değil string; /email eksik; /age (200) maximum 150'yi aşıyor. Her hata kesin JSON Pointer yolunu raporlar; veride neyi düzelteceğinizi — ya da schema'yı nerede gevşeteceğinizi — tahminsiz görürsünüz.

Ayrık Birleşim — const ile oneOf

{
  "type": "order.created",
  "data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
}
{
  "oneOf": [
    {
      "properties": {
        "type": { "const": "order.created" },
        "data": {
          "type": "object",
          "properties": {
            "orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
            "totalUsd": { "type": "number", "minimum": 0 }
          },
          "required": ["orderId", "totalUsd"]
        }
      },
      "required": ["type", "data"]
    },
    {
      "properties": {
        "type": { "const": "order.refunded" },
        "data": { "type": "object", "required": ["refundId"] }
      },
      "required": ["type", "data"]
    }
  ]
}

Webhook zarfı doğrulaması. type değeri "order.created" olduğu için ilk oneOf dalı eşleşir. type'ı "order.refunded" yapın veya orderId desenini bozun; oneOf'un dal başına başarısızlığı nasıl raporladığını görürsünüz.

Nesne Dizisi — items + uniqueItems

[
  { "sku": "A1", "qty": 3 },
  { "sku": "B2", "qty": 5 },
  { "sku": "A1", "qty": 3 }
]
{
  "type": "array",
  "minItems": 1,
  "uniqueItems": true,
  "items": {
    "type": "object",
    "properties": {
      "sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
      "qty": { "type": "integer", "minimum": 1 }
    },
    "required": ["sku", "qty"]
  }
}

İki eleman bayt-bayt aynı, bu yüzden uniqueItems tetiklenir. 0 ve 2 numaralı elemanlar çakışıyor — doğrulayıcı yinelemeyi dizi kökünde raporlar. Sepet satırı yinelemelerini ve birleştirme bug'larından kaynaklanan kargo isteklerini yakalamak için kullanışlıdır.

Nasıl Kullanılır

  1. 1

    JSON Schema'nızı yapıştırın

    Schema'nızı sağ panele bırakın. Doğrulayıcı, $schema URI'si varsa draft'ı otomatik algılar; yoksa araç çubuğundan Draft 2020-12, 2019-09 veya Draft-07'yi seçin.

  2. 2

    JSON verinizi yapıştırın

    Kontrol etmek istediğiniz JSON belgesini sol panele bırakın. Doğrulama yazarken çalışır; büyük girişler (>200 KB) yazımı akıcı tutmak için manuel Doğrula düğmesine geçer.

  3. 3

    Hata listesini okuyun

    Her hatanın bir JSON Pointer yolu, bir keyword'ü ve tek satırlık bir mesajı vardır. Bir hataya tıklayarak verinizdeki konuma atlayın, düzeltin ve sayacın gerçek zamanlı düştüğünü görün.

Yaygın JSON Schema Tuzakları

Type: integer ile number

JSON Schema 1.0'ı number sayar ama integer saymaz. Sözleşmeniz integer diyorsa, çoğu dil 1'e eşit kabul etse bile doğrulayıcı 1.0'ı reddeder. Gerçekten integer'a ihtiyacınız yoksa number seçin.

✗ Yanlış
{ "qty": 1.0 }   schema: { "type": "integer" }   → error: not an integer
✓ Doğru
{ "qty": 1 }     schema: { "type": "integer" }   → valid

Yanlış İç İçe Seviyede required

required, properties'in yanında durmalı, içinde değil. Bir özellik tanımının içindeki required dizisi sessizce yok sayılır — doğrulayıcı onu asla uygulamaz.

✗ Yanlış
{ "properties": { "name": { "type": "string", "required": true } } }
✓ Doğru
{ "properties": { "name": { "type": "string" } }, "required": ["name"] }

additionalProperties Varsayılanı true'dur

additionalProperties: false olmadan schema açıktır — fazladan herhangi bir anahtar geçer. Bunu unutmak, schema'ların "her şeyi kabul etmesinin" en yaygın nedenidir.

✗ Yanlış
{ "properties": { "id": { "type": "integer" } } }   accepts: { "id": 1, "foo": "bar", "x": null }
✓ Doğru
{ "properties": { "id": { "type": "integer" } }, "additionalProperties": false }

OpenAPI 3.0 nullable ile Draft 2020-12 Tür Dizisi

OpenAPI 3.0 nullable: true kullanır; Draft 2020-12 type: ["string", "null"] kullanır. İkisini karıştırmak doğru görünen ama aslında asla null'a izin vermeyen schema'lar üretir.

✗ Yanlış
{ "type": "string", "nullable": true }   in 2020-12: nullable is just an unknown keyword
✓ Doğru
{ "type": ["string", "null"] }   in 2020-12: explicitly allows null

Sabitleyici Olmadan Pattern

JSON Schema regex'i varsayılan olarak her yerde eşleşir — pattern: "^[A-Z]+$" tüm string'e sabitlenir, ama pattern: "[A-Z]+" herhangi bir yerde büyük harf varsa eşleşir.

✗ Yanlış
pattern: "[A-Z]+"   accepts: "helloX"   (because X matches)
✓ Doğru
pattern: "^[A-Z]+$"   accepts only: "HELLO"

anyOf'un Kastedildiği Yerde oneOf

oneOf tam olarak bir dalın eşleşmesini ister. İki dal aynı şekli kabul ediyorsa oneOf, anyOf'un geçireceği veride başarısız olur — ve hata mesajı kafa karıştırır ("matches more than one").

✗ Yanlış
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → error: matches both
✓ Doğru
anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ]   on: "hi"   → valid

Yaygın Kullanım Senaryoları

API İstek Doğrulaması
Deploy etmeden önce bir istek gövdesini ve endpoint'inizin schema'sını yapıştırın. Testlerinizin kapsamadığı 400 yanıtlarını yakalayın — eksik required alanlar, yanlış türler, aralık dışı sayılar.
Webhook Payload Doğrulaması
Tedarikçi, handler'ınızın reddettiği bir payload mı gönderdi? Gerçek payload'u önce kendi schema'nıza, sonra tedarikçinin yayımlanmış schema'sına karşı doğrulayın. İkisi arasındaki diff sizin bug'ınızdır.
Yapılandırma Dosyası Linting
package.json, tsconfig.json, helm values.yaml — her yapılandırma dosyasının açık bir schema'sı vardır. Schema'yı yapıştırın, yapılandırmayı yapıştırın, yazım hatasını bulun. Deneme-yanılmayı atlayın.
OpenAPI Bileşen Testi
Bir OpenAPI 3.1 belgesinden bir schema bileşenini çıkarın, buraya yapıştırın, örnek payload'ları doğrulayın. Mock sunucu kurmaktan hızlı, deterministik, SDK'sız.
Form Gönderimi Pre-Flight
Frontend doğrulamasını bağlamadan önce örnek bir form payload'unu yapıştırın. Schema'nın beklediklerinizi reddettiğini, kabul ettiğini onaylayın, sonra aynı schema'yı istemciye ve sunucuya gönderin.
Veri Pipeline Sözleşme Denetimi
ETL çıktınız mı kaydı? Örnek bir satır ile aşağı akıştaki schema'yı yapıştırın. Pipeline 10.000 kaydı yeniden denemeden önce hangi üreticinin değiştiğini ve hangi anahtarların kırıldığını saptayın.

Teknik Detaylar

Draft 2020-12 Uyumlu
Yayımlanan Draft 2020-12 spektini uygular — keyword'ler, tür sistemi, format sözlüğü. Ajv 8.x ve ajv-formats çıktısına karşı çapraz doğrulanmıştır.
JSON Pointer Hata Yolları
Hatalar RFC 6901 JSON Pointer kullanır (/user/email/0). Her keyword başarısızlığı veride tek bir çözülebilir konumu işaret eder — belirsizlik yok, string araması yok.
Dahili $ref Çözümü
Tek bir belge içindeki $ref işaretçilerini çözer (#/$defs/foo, #/properties/bar). Döngüler tespit edilir ve raporlanır. Harici HTTP $ref'leri gizlilik için devre dışıdır.

En İyi Uygulamalar

Daima additionalProperties: false Ayarlayın
Giriş sözleşmelerinde (istek gövdeleri, yapılandırma dosyaları, kuyruk mesajları) bilinmeyen anahtarlar genellikle bug'lardır — yazım hataları, kazara alanlar veya saldırgan yoklamaları. Varsayılan olarak reddedin.
Yeniden Kullanılabilir Alt Schema'lar İçin $defs Kullanın
Aynı şekli iki kez satır içine alın, kayar. Ortak tanımları $defs'e taşıyın ve $ref ile başvurun — tek doğru kaynak, her değişiklik her yerde uygulanır.
İş Mantığından Önce Doğrulayın
JSON.parse'ın hemen ardından, parse edilmiş yapıya dokunmadan önce schema doğrulamasını çalıştırın. Tür daraltma, varsayılan atama ve kalıcılaştırma sözleşmenin tutmasına bel bağlar — tuttuğundan emin olun.

Sık Sorulan Sorular

JSON Schema doğrulaması nedir?
JSON Schema doğrulaması, bir JSON belgesinin JSON Schema sözdiziminde yazılı bir sözleşmeye uyup uymadığını denetler. Schema alan türlerini, required anahtarları, izin verilen değerleri ve yapısal kuralları tanımlar; doğrulayıcı her iki belgeyi paralel gezer ve sözleşmeyi ihlal eden her yolu raporlar. Güvenilmeyen giriş (API isteği, webhook, yapılandırma dosyası, form payload) ile iş mantığınız arasındaki sınırda çalışır — şekil hatalarını aşağı akıştaki kodu bozmadan önce yakalar. Node, Python ve tarayıcı için uçtan uca örnekler için JSON Schema doğrulama tam rehberimize bakın.
Bu doğrulayıcı hangi JSON Schema sürümlerini destekliyor?
Draft 2020-12 (varsayılan ve önerilen), Draft 2019-09 ve Draft-07. Doğrulayıcı, schema'nın $schema URI'sinden draft'ı otomatik algılar; yoksa açılır listeden seçtiğinizi kullanır. 2026'da yeni projeler için Draft 2020-12 seçin — OpenAPI 3.1 doğal olarak ve Ajv varsayılan olarak bunu kullanır. Draft-07 hâlâ legacy kod tabanlarında yaygındır (eski AJV kurulumları, Helm chart'ları, VS Code ayarları).
JSON'u bir schema'ya karşı nasıl doğrularım?
JSON verinizi sol panele, JSON Schema'nızı sağ panele yapıştırın. Doğrulayıcı yazdıkça anında çalışır — yeşil onay geçerli demektir, kırmızı liste hataları gösterir. Her hata bir JSON Pointer yolu (örneğin /user/email), başarısız keyword (type, required, pattern, minimum) ve okunabilir bir mesaj içerir. Sorunlu satıra atlamak için herhangi bir hataya tıklayın. Yükleme yok, kayıt yok.
JSON Schema doğrulaması ile JSON sözdizimi doğrulaması arasındaki fark nedir?
JSON sözdizimi doğrulaması yalnızca belgenin parse edildiğini onaylar — fazla virgül yok, eksik süslü parantez yok. JSON Biçimlendirici bunu halleder. JSON Schema doğrulaması parse'tan sonra çalışır ve parse edilmiş yapının sözleşmeye uyup uymadığını denetler: required alanlar mevcut mu, türler doğru mu, değerler aralıkta mı. Genellikle ikisini birden çalıştırırsınız — önce parse edilebilirliği onaylamak için biçimlendirme, sonra schema'ya karşı doğrulama.
Doğru görünen JSON'u schema'm neden reddediyor?
Beş yaygın şüpheli: (1) additionalProperties: false — verinizde schema'nın tanımlamadığı bir anahtar var, çoğu zaman yazım hatası veya yeni bir alan; (2) type: "integer" ile type: "number" — JSON Schema 1.0'ı number sayar, integer değil; (3) format keyword'leri (email, uri, uuid) iyi görünseler bile bozuk string'leri reddeder; (4) yanlış iç içe seviyede required — required, properties'in yanında durmalı, içinde değil; (5) JSON'da, schema integer 42 beklerken "42" string'i var. Hata yolu hangisi olduğunu işaret edecektir.
$ref ve uzak schema referanslarını destekliyor mu?
Dahili $ref işaretçileri (#/$defs/foo, #/properties/bar) hazır halde çalışır. Harici URL'lere uzak $ref bilinçli olarak devre dışı bırakılmıştır — harici schema'ları çekmek doğrulama etkinliğinizi üçüncü taraflara sızdırır ve gizlilik modelini bozar. Çok dosyalı bir schema'ya karşı doğrulamak için referans verilen tanımları $defs ile tek bir belgeye satır içine taşıyın veya uzak ref'lerin uygun olduğu kendi CI'nızda Ajv ile çalıştırın.
additionalProperties: false ne yapar?
additionalProperties: false, properties'te tanımlanmamış her anahtarı reddeder. Sözleşmeleri sıkılaştırmak için en kullanışlı tek keyword'dür — onsuz schema'lar varsayılan olarak açık olur ve yanlış yazılmış veya kötü niyetli alanları sessizce kabul eder. Giriş sözleşmelerinde (istek gövdeleri, yapılandırma dosyaları, kuyruk mesajları) her zaman additionalProperties: false ayarlayın. Yalnızca schema, daha büyük bir belgenin kısmi tanımıysa true bırakın (veya atlayın).
Node.js veya Python'da JSON'u schema'ya karşı nasıl doğrularım?
Node: Ajv yükleyin (npm i ajv ajv-formats), new Ajv().compile(schema) çağırın, sonra validate(data). Python: jsonschema yükleyin (pip install jsonschema), jsonschema.validate(data, schema) çağırın. TypeScript için schema'dan json-schema-to-typescript ile türler üretin; böylece compile-time ve runtime senkron kalır. JSON Schema doğrulama rehberimizde Node, Python ve tarayıcı için kopyala-yapıştır tarifler bulunur.
oneOf, anyOf ve allOf arasındaki fark nedir?
allOf — her alt schema'yla eşleşmek zorunda (kesişim, kompozisyon için). anyOf — en az biriyle eşleşmeli (birleşim, fast-fail). oneOf — tam olarak biriyle eşleşmeli (ayrık birleşim, daha yavaş ama daha sıkı). type alanıyla etiketlenmiş webhook olayları gibi ayrık birleşimler için oneOf kullanın; izin verici birleşimler için anyOf; bir taban schema'ya ek kısıtlar bindirmek için allOf. oneOf en yavaşıdır çünkü her dalı dener — tam olarak biri gerekmiyorsa anyOf'u tercih edin.
OpenAPI schema'larını destekliyor mu?
OpenAPI 3.1 doğal olarak Draft 2020-12 kullanır, bu yüzden herhangi bir OpenAPI 3.1 schema bileşeni doğrudan yapıştırılır. OpenAPI 3.0 büyük ölçüde uyumlu olan bir Draft 4 alt kümesini kullanır — Draft 2020-12'de type: ["string", "null"] olarak ifade edilen nullable: true (3.0 sözdizimi) etrafındaki sınır durumlarına çarpabilirsiniz. Tam OpenAPI belge doğrulaması için (paths, operations, security) Spectral gibi özel bir OpenAPI linter kullanın; bu araç schema bölümüne odaklanır.
Doğrulayıcı neden JSON Schema'mın kendisinin geçersiz olduğunu söylüyor?
JSON Schema, geçerli bir schema olmadan önce geçerli JSON olması gereken bir JSON belgesidir. Yaygın nedenler: properties nesnesinde sondaki virgül, çift yerine tek tırnak, var olmayan bir draft URL'sine ayarlanmış $schema veya array yerine string olarak listelenmiş required. Önce schema'yı JSON Biçimlendirici'de biçimlendirerek sözdizimi sorunlarını yüzeye çıkarın, sonra anlamsal doğrulama için buraya yapıştırın.
Araç JSON'umu veya schema'mı sunucuya gönderiyor mu?
Hayır. Tüm parsing ve doğrulama tarayıcınızda yerel olarak çalışır. JSON'unuz, schema'nız ve doğrulama sonuçları makinenizden asla çıkmaz — yükleme yok, girişlerin localStorage'a yazılması yok, yapıştırdıklarınız üzerinde analitik yok. Tescilli API sözleşmeleri, dahili yapılandırma dosyaları ve hassas payload'lar için güvenlidir. Yenilemeden sağ çıkması için yalnızca draft seçiminiz localStorage'da kalır; silmek için tarayıcı verilerini temizleyin.
JSON Lines (NDJSON) veya birden fazla belge doğrulayabilir miyim?
Bu araç çalışma başına bir belge doğrular. JSON Lines için her satırı ayrı doğrulayın veya Node'da Ajv'yi bir schema ve JSONStream gibi bir akış parser'ı ile kullanın. Büyük veri setleri için toplu doğrulamada komut satırını tercih edin — ajv-cli veya check-jsonschema (Python) tek bir schema derlemesiyle saniyede binlerce dosyayı işler.