ToolDeck

JSON Schema Doğrulayıcı

JSON verisini JSON Schema (Draft 7) ile doğrula

Örnek dene

JSON Veri

JSON Schema

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir
Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir

JSON Schema Doğrulama Nedir?

JSON Schema doğrulama, bir JSON belgesinin, JSON Schema içinde tanımlanmış yapısal ve değer kısıtlamalarına uyup uymadığını kontrol etme işlemidir. Şemanın kendisi de bir JSON belgesidir ve verilerinizin beklenen biçimini tanımlar: hangi özelliklerin zorunlu olduğunu, hangi tipleri alması gerektiğini, sayılar için izin verilen aralıkları, dize desenlerini, dizi uzunluklarını ve daha fazlasını. JSON Schema spesifikasyonu json-schema.org'da yönetilmekte ve bir dizi IETF taslağı olarak yayımlanmaktadır; Draft 7 ve Draft 2020-12 en yaygın benimsenenlerdir.

Sıradan JSON doğrulama yalnızca sözdizimini kontrol eder (parantezler kapalı mı? dizeler tırnak içinde mi?), oysa şema doğrulaması daha ileri gider. Şu soruları yanıtlar: Bu API'nin yanıtı her zaman tam sayı olan bir "id" alanı içeriyor mu? "status" alanı izin verilen üç değerden biri mi? İç içe nesneler doğru biçimde şekillendirilmiş mi? Bu tür yapısal doğrulama, sözdizim kontrollerinin tamamen kaçırdığı hataları yakalar; çünkü sözdizimsel olarak geçerli JSON, uygulamanız için anlamsal olarak yanlış olabilir.

JSON Schema; OpenAPI/Swagger tanımlarında, yapılandırma dosyası doğrulamasında, form doğrulamasında, veritabanı belge kısıtlamalarında ve otomatik testlerde kullanılır. Ajv (JavaScript), jsonschema (Python) ve check-jsonschema (CLI) gibi araçlar, spesifikasyonu uygulayarak veriyi programatik olarak doğrulamanızı sağlar. Bu online doğrulayıcı, herhangi bir kütüphane kurmadan hem şemayı hem de veri belgesini yapıştırarak uyumu anında kontrol etmenizi sağlar.

Neden Online JSON Schema Doğrulayıcı Kullanılmalı?

Şema yazmak ve doğrulama hatalarını elle ayıklamak yavaştır. Online bir JSON Schema doğrulayıcı, verilerinizin şemanızla eşleşip eşleşmediği konusunda anında geri bildirim sağlar; hatanın tam olarak nerede meydana geldiğini gösteren net hata mesajlarıyla.

Anında doğrulama geri bildirimi
Şemanızı ve verinizi yapıştırın, doğrulama sonuçlarını gerçek zamanlı olarak görün. Her hata, JSON yolunu ve başarısız olan kısıtlamayı gösterir; böylece doğrulayıcı kütüphanesi çıktısını okumak zorunda kalmadan sorunları giderebilirsiniz.
🔒
Gizliliği öncelikli, yalnızca tarayıcıda işleme
JSON veriniz tarayıcınızı asla terk etmez. Tüm doğrulama JavaScript ile yerel olarak çalışır. Sunucu yok, günlük yok, veri saklama yok. Dahili API'leri tanımlayan veya özel alan adları içeren şemalar için güvenlidir.
🎯
Taslak bilinçli doğrulama
Doğrulayıcı; type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf ve additionalProperties dahil Draft 7 şema anahtar kelimelerini işler. Şemanızı derleme hattınıza veya test paketinize entegre etmeden önce burada test edin.
📋
Hesap veya kurulum gerektirmez
Sayfayı açın, JSON'unuzu yapıştırın ve doğrulayın. npm install yok, pip paketi yok, Docker imajı yok. Geliştirme araçları kuramadığınız bir makinede hızlı şema kontrolü gerektiğinde kullanışlıdır.

JSON Schema Doğrulama Kullanım Durumları

API sözleşme testi
API yanıtlarını OpenAPI spesifikasyonunuzda tanımlanmış şemaya göre doğrulayın. Bir alanın tam sayıdan dizgeye geçmesi gibi kırıcı değişiklikleri üretime geçmeden önce yakalayın.
Yapılandırma dosyası doğrulama
CI/CD hatları, Kubernetes manifestoları veya uygulama ayarları için JSON yapılandırma dosyalarının, commit yapmadan önce beklenen şemayla eşleştiğini kontrol edin. Eksik veya yanlış yazılmış anahtarların neden olduğu dağıtım hatalarını önler.
DevOps boru hattı kapıları
Sözleşmeyi ihlal eden yükleri reddetmek için şema doğrulamayı bir CI adımı olarak ekleyin. Bu; Terraform değişken dosyaları, GitHub Actions girdileri veya otomasyon tarafından tüketilen yapılandırılmış JSON için geçerlidir.
QA ve test verisi incelemesi
Test fixture'larının ve sahte veri dosyalarının, uygulamanızın beklediği şemayla uyumlu olduğunu doğrulayın. Uyumsuz test verisi, yanlış pozitif test sonuçlarının yaygın bir kaynağıdır.
Veri hattı girişi
Bir veri hattının başında gelen JSON kayıtlarını doğrulayın. Şema doğrulama, hatalı biçimlendirilmiş olayları veri ambarınıza ulaşmadan önce filtreler ve aşağı akışta temizleme maliyetlerini azaltır.
JSON Schema sözdizimini öğrenme
Şema anahtar kelimelerini etkileşimli olarak deneyin. Bir şema yazın, test verisi yapıştırın ve hangi kısıtlamaların geçip başarısız olduğunu görün. Her seferinde terminal üzerinden komut dosyası çalıştırmaktan çok daha hızlıdır.

JSON Schema Anahtar Kelime Referansı

Bir JSON Schema, her biri doğrulanan veri üzerinde bir kısıtlama uygulayan anahtar kelimelerden oluşur. Aşağıdaki tablo, Draft 7 ve sonrasında en yaygın kullanılan anahtar kelimeleri listeler. Her anahtar kelime, aynı şema nesnesindeki diğerleriyle birleştirilebilir.

Anahtar KelimeAmaçÖrnek
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

JSON Schema Taslak Karşılaştırması: Draft 7 vs 2019-09 vs 2020-12

JSON Schema birçok taslak sürümden geçmiştir. Draft 7 (2018'de yayımlandı), araç desteği açısından en yaygın benimsenendir. Draft 2019-09, $defs'i ($definitions yerine), unevaluatedProperties'i ve $recursiveRef'i tanıttı. Draft 2020-12 (en son kararlı sürüm), $recursiveRef'i $dynamicRef ile değiştirdi ve tuple doğrulaması için prefixItems'ı tanıttı. Taslak seçerken, doğrulama kütüphanenizin onu desteklediğini doğrulayın. Ajv üç taslağı da destekler. Python'un jsonschema kütüphanesi, sürüm 4.0'dan itibaren 2020-12'ye kadar destekler.

ÖzellikDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

Kod Örnekleri

Aşağıdaki örnekler, JSON'un bir şemaya karşı programatik olarak nasıl doğrulanacağını göstermektedir. Her biri kendi dil ekosistemi için iyi bakımlı bir kütüphane kullanır.

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

Sıkça Sorulan Sorular

JSON doğrulama ile JSON Schema doğrulama arasındaki fark nedir?
JSON doğrulama, bir dizenin geçerli JSON sözdizimi olup olmadığını kontrol eder: düzgün iç içe parantezler, tırnaklı anahtarlar, sondaki virgül yok. JSON Schema doğrulama ise bir adım daha ileri giderek ayrıştırılmış JSON verisinin yapısal bir sözleşmeyle eşleşip eşleşmediğini kontrol eder: doğru tipler, gerekli alanlar mevcut, değerler izin verilen aralıklarda. Şema uygulamadan önce geçerli JSON'a ihtiyacınız vardır, ancak geçerli JSON şema doğrulamasından yine de geçemeyebilir.
Hangi JSON Schema taslağını kullanmalıyım?
Draft 7 en güvenli varsayılandır. Diller genelinde en geniş kütüphane desteğine sahiptir ve çoğu projenin ihtiyaç duyduğu anahtar kelimeleri kapsar: type, properties, required, enum, pattern, anyOf, oneOf, allOf ve $ref. Tuple doğrulaması için prefixItems, genişletilebilir şemalar için $dynamicRef veya katı nesne şekilleri için unevaluatedProperties gibi özelliklere ihtiyaç duyuyorsanız Draft 2020-12'yi kullanın. Yükseltmeden önce taslak desteğini doğrulamak için doğrulayıcı kütüphanenizin belgelerini inceleyin.
JSON Schema'da $ref nasıl çalışır?
$ref anahtar kelimesi, başka bir şemaya URI aracılığıyla referans vermenizi sağlar; böylece şemayı kopyalamanıza gerek kalmaz. "$ref": "#/$defs/address" gibi bir değer, aynı belgenin $defs bölümünde tanımlanmış bir şemaya işaret eder. "$ref": "https://example.com/schemas/address.json" ile harici dosyalara da referans verebilirsiniz. Draft 7'de $ref, aynı nesnedeki tüm kardeş anahtar kelimelerin yerini alır. Draft 2019-09 ve sonrasında kardeş anahtar kelimeler $ref ile birlikte uygulanır.
anyOf, oneOf ve allOf arasındaki fark nedir?
allOf, verinin dizideki her alt şemayla eşleşmesini gerektirir. anyOf, en az bir alt şemayla eşleşmeyi gerektirir. oneOf, tam olarak bir alt şemayla eşleşmeyi gerektirir; veri sıfır veya birden fazlasıyla eşleşirse başarısız olur. Nullable alanlar için anyOf ile bir tip ve null yaygındır: {"anyOf": [{"type": "string"}, {"type": "null"}]}. Alt şemalar birbirini dışlıyorsa — etiketli union'lar gibi — oneOf kullanın.
JSON Schema iç içe nesneleri ve dizileri doğrulayabilir mi?
Evet. İç içe nesne anahtarları için şema tanımlamak üzere properties anahtar kelimesini, her dizi öğesinin eşleşmesi gereken şemayı tanımlamak için items anahtar kelimesini kullanın. Bunları istediğiniz derinliğe kadar iç içe yerleştirebilirsiniz. Her konumun farklı bir şemaya sahip olduğu diziler (tuple'lar) için Draft 2020-12'de prefixItems veya Draft 7'de items'ın dizi biçimini kullanın.
Bu araca yapıştırdığım veri bir sunucuya gönderiliyor mu?
Hayır. Doğrulayıcı tamamen tarayıcınızda JavaScript kullanılarak çalışır. JSON veriniz ve şemanız hiçbir sunucuya iletilmez. Aracı kullanırken tarayıcınızın ağ denetçisini açarak bunu doğrulayabilirsiniz.
CI/CD hattında JSON Schema nasıl doğrulanır?
check-jsonschema (Python/pip) veya ajv-cli (Node.js/npm) gibi bir CLI doğrulayıcı kullanın. Her ikisi de argüman olarak bir şema dosyası ve bir ya da daha fazla veri dosyası kabul eder. Doğrulama komutunu CI yapılandırmanıza bir adım olarak ekleyin. Doğrulama başarısız olursa, süreç sıfır olmayan bir kodla çıkar ve bu da hattı engeller. GitHub Actions için check-jsonschema action'ını doğrudan da kullanabilirsiniz.