JSON Doğrulayıcı

Gelişmiş çevrimiçi JSON sözdizimi doğrulayıcı ve şema kontrol aracı—tamamen tarayıcı tabanlı ve gizliliği önceliklendirir.

JSON'unuzu anında doğrulayın

JSON'u Şema ile Doğrula
Desteklenen şema sürümü: Taslak-07.

Bu ücretsiz çevrimiçi JSON Doğrulayıcı ile JSON verilerinizi anında sözdizimi hataları ve yapısal sorunlar için kontrol edebilirsiniz. İster ham API yanıtlarını, yapılandırma dosyalarını ister yapılandırılmış veri paketlerini doğruluyor olun, aracımız sorunları gerçek zamanlı olarak vurgular ve hatta otomatik düzeltmeler sunar. Daha sıkı doğrulama için bir JSON Şeması ekleyerek zorunlu alanlar, belirli türler ve formatlar (e-posta, URI vb.) gibi kuralları uygulayabilirsiniz. Araç, JSON Şema Taslağı-07 ile tam uyumludur. Tüm işlemler tarayıcınızda gerçekleşir—verileriniz asla cihazınızı terk etmez.

JSON Doğrulaması Nedir?

JSON (JavaScript Nesne Gösterimi), hem insan tarafından okunabilir hem de makineler tarafından kolayca çözümlenip oluşturulabilir şekilde tasarlanmış, yaygın olarak kullanılan hafif bir veri alışveriş formatıdır. Temel amacı, nesneler, diziler, metinler, sayılar, mantıksal değerler ve null değerler gibi yapılandırılmış verileri programlama dili bağımsız bir biçimde temsil etmektir.

JSON doğrulama, bir JSON belgesinin hem sözdizimi hem de yapısal olarak doğru olduğunu programatik olarak doğrulama sürecidir. Bu, iki ana yönün kontrol edilmesini içerir:

  • Sözdizimsel Doğrulama: Ham metnin, ECMA-404 JSON spesifikasyonunda tanımlanan resmi gramer kurallarına uygun olmasını sağlamak. Çoğu modern programlama dilindeki ayrıştırıcılar (örneğin, JavaScript'teki JSON.parse(), Python'daki json.loads(), Java'daki JSONDecoder), geçerli sözdizimini bekler ve girdi hatalıysa hata verir.
  • Yapısal (Şema) Doğrulama: Sentaksın ötesinde, şema doğrulama, JSON verisinin beklenen yapıya uygunluğunu kontrol eder; bu yapıya veri türleri, gerekli özellikler, değer kısıtlamaları ve iç içe geçmiş nesneler/diziler dahildir. Şema doğrulaması genellikle geçerli verilerin kurallarını tanımlayan JSON Şeması kullanılarak yapılır.

Neden JSON Doğrulamalı?

JSON doğrulama, verilerin iletimi, depolanması veya servisler arası iletişim için serileştirilmesinde kritik öneme sahiptir. Başlıca nedenler şunlardır:

  • Hata Önleme: Verileri işlemeye çalışmadan önce sözdizimi hatalarını (örneğin, eksik virgüller, eşleşmeyen parantezler, yasak karakterler) erken tespit edin ve bildirin.
  • Veri Bütünlüğü ve Güvenliği: Hatalı ya da kötü amaçlı JSON verilerini reddederek, arka uç çökmelerini, enjeksiyon saldırılarını ve veri bozulmasını önlemeye yardımcı olur.
  • Tip Güvenliği: Katı tip kontrolü uygulayın—örneğin, bir alanın boolean olması bekleniyorsa string olarak gönderilmemesini sağlayın veya UUID’lerin, e-postaların ya da sayıların doğru formata uygun olmasını garanti edin.
  • Çapraz Dil Uyumluluğu: Bir ortamda oluşturulan JSON'un (örneğin, Node.js) başka bir ortamda (örneğin, Python, Go, Java) güvenle kullanmasını sağlayarak seri hale getirme/seriyi çözme hatalarını önleyin.
  • Bakım Kolaylığı ve Dayanıklılık: Doğrulanmış veri yapıları, izlenebilirliği artırır ve yapılandırma dosyalarında, günlüklerde veya API istek/yanıtlarında zor tespit edilen hataların riskini azaltır.
  • Gizlilik ve Güvenlik: Doğrulama tamamen istemci tarafında (tarayıcıda) gerçekleştirilebilir, böylece ham veya hassas verilerin doğrulama için kullanıcının cihazından dışarı çıkması engellenir.

Yaygın JSON Doğrulama Hataları (Detaylı Örneklerle)

Tırnak İşaretsiz Anahtarlar

JSON nesnelerindeki tüm anahtarlar çift tırnak içinde olmalıdır.

{ name: "Alice" }
{ "name": "Alice" }

Birçok JSON benzeri format (örneğin, JavaScript nesne literal'leri) tırnaksız anahtar kullanımına izin verir, ancak standart JSON bunu desteklemez.

Tek Tırnak İşaretleri

JSON dizelerinde yalnızca çift tırnak kullanılmalıdır; tek tırnaklar kabul edilmez.

{ 'name': 'Bob' }
{ "name": "Bob" }

Tek tırnak kullanmak, tüm uyumlu JSON kütüphanelerinde ayrıştırıcı hatalarına yol açar.

Sondaki Virgüller

Bir nesne veya dizideki son öğeden sonra virgül kullanılmaz.

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

Sonundaki virgüller JavaScript'te çalışabilir, ancak katı JSON ayrıştırıcılarında geçerli değildir.

Karakterlerin Yanlış Kaçırılması

Dize içindeki tırnak işaretleri ve özel karakterler, ters eğik çizgi (backslash) kullanılarak kaçırılmalıdır.

{ "quote": "Tom 'merhaba' dedi" }
{ "quote": "Tom \"merhaba\" dedi" }

Diğer kaçış dizileri arasında ters eğik çizgi için \\, yeni satır için \n ve sekme için \t bulunur.

Yanlış Veri Türleri

Sayısal değerler, booleanlar veya null için dize kullanılmamalıdır.

{ "enabled": "doğru", "count": "10" }
{ "etkin": true, "adet": 10 }

JSON, bool değerler, sayılar ve metinler arasında ayrım yapar—doğru türün kullanıldığından emin olun.

İlkel Olmayan Anahtarlar

JSON nesne anahtarları her zaman metin olmalıdır; anahtar olarak sayılar, boolean değerleri veya diğer türler kullanılamaz.

{ 123: "abc" }
{ "123": "abc" }

Yinelenen Anahtarlar

JSON standardı tarafından izin verilmesine rağmen, tekrar eden anahtarlar yaygın bir hata kaynağıdır.

{ "name": "Alice", "name": "Bob" }

Çoğu ayrıştırıcı yalnızca son değeri ("Bob") tutar, önceki değerleri ise sessizce yok sayar.

Yorumların Kullanımı

Standart JSON yorumlara izin vermez, ancak bazı düzenleyiciler yorumları destekler.

{
  // Kullanıcı bilgileri
  "name": "Alice"
}
{
  "name": "Alice"
}

Şema Doğrulama: Yapı ve Veri Türlerini Zorunlu Kılma

JSON Şeması, JSON belgelerinin beklenen yapısını tanımlamak ve doğrulamak için güçlü bir standarttır. Şu özellikleri belirlemenize olanak tanır:

  • Gerekli alanlar (`required`)
  • Veri türleri (`type`: string, sayı, boolean, nesne, dizi, null)
  • Dize formatları (`format`: e-posta, uuid, tarih-zaman, vb.)
  • Dizilerde Desen Eşleştirme (`pattern`)
  • Sayı aralıkları (`minimum`, `maksimum`)
  • Dizi uzunluğu ve öğe doğrulaması (`minItems`, `maxItems`, `items`)
  • Nesneler ve diziler için iç içe doğrulama
  • Sabit Değer Kısıtlamaları (`enum`)

Örnek: Kullanıcı Şeması (Taslak-07)

{
  "type": "object",
  "properties": {
    "id":    { "type": "string", "format": "uuid" },
    "name":  { "type": "string", "minLength": 1 },
    "email": { "type": "string", "format": "email" },
    "is_active": { "type": "boolean" }
  },
  "required": ["id", "name", "email"],
  "additionalProperties": false
}

Bunun sağladığı:

  • id geçerli bir UUID dizisi olmalıdır.
  • isim boş olmayan bir metin olmalıdır.
  • e-posta, standart e-posta formatına uygun olmalıdır.
  • is_active (isteğe bağlı) bir boolean olmalıdır.
  • Yukarıda belirtilenler dışında başka özelliklere izin verilmez.

Gerçek Dünya Örneği: Stripe API Yanıtlarını Doğrulama

Stripe API'sinden (örneğin, PaymentIntent) JSON yanıtları aldığınızı varsayalım. Şema doğrulaması, asla eksik veya yanlış türde verileri işlemenizi engeller ve böylece güvenilir ve hatasız bir ödeme deneyimi sağlar.

{
  "type": "object",
  "properties": {
    "id":      { "type": "string", "pattern": "^pi_" },
    "object":  { "type": "string", "const": "payment_intent" },
    "amount":  { "type": "integer", "minimum": 1 },
    "currency":{ "type": "string", "minLength": 3, "maxLength": 3 },
    "status":  { "type": "string", "enum": [
      "ödeme_yöntemi_gerekli",
      "onay_gerekli",
      "işleniyor",
      "başarılı",
      "iptal_edildi"
    ]}
  },
  "required": ["id", "object", "amount", "currency", "status"],
  "additionalProperties": false
}
  • id "pi_" ile başlamalıdır
  • nesne her zaman "payment_intent" olmalıdır
  • miktar, 1'e eşit veya büyük bir tam sayı olmalıdır
  • para birimi üç harfli bir dize olmalıdır (örneğin, "usd", "eur")
  • durum belirtilen değerlerden biri olmalıdır

Faydalar

  • Erken Hata Tespiti: İş mantığınıza ulaşmadan önce kritik API değişikliklerini veya eksik verileri yakalayın.
  • Otomatik Test: Gerçek ve sahte yanıtları doğrulamak için CI/CD süreçlerinde şema kullanın.
  • Takımlar Arası Tutarlılık: Ön uç, arka uç ve üçüncü taraf API’ler arasındaki veri sözleşmelerini standartlaştırın.

Doğru JSON doğrulaması—hem sözdizimi hem de şema açısından—gizli hataları önler, en iyi uygulamaları sağlar ve kötü amaçlı ya da hatalı girdilere karşı uygulamalarınızı güvence altına alır. İster yapılandırma dosyalarında, ister API veri yüklerinde, ister servisler arası mesajlaşmada kullanılsın, sağlam doğrulama modern yazılım sistemleri için temel bir gerekliliktir.

Gizlilik ve Güvenlik

Tüm doğrulama ve şema kontrolleri tarayıcınızda yerel olarak gerçekleştirilir. Hiçbir veri yüklenmez veya kaydedilmez. JSON verileriniz tamamen gizli kalır.

JSON Doğrulama için Kod Örnekleri

Yerleşik kütüphaneler veya popüler frameworkler kullanarak çeşitli programlama dillerinde JSON doğrulamanın nasıl yapıldığını görün. Bu örnekler hem sözdizimi doğrulamasını hem de şema doğrulamasını göstermektedir.

JavaScript (Node.js)
Install: Standard library
const jsonString = '{"name":"Alice","age":30}';
try {
  const obj = JSON.parse(jsonString);
  console.log("Valid JSON:", obj);
} catch (e) {
  console.error("Invalid JSON!", e.message);
}
JavaScript (Node.js) with ajv (Schema validation)
Install: npm install ajv
const Ajv = require("ajv");
const ajv = new Ajv();
const schema = { type: "object", properties: { age: { type: "integer" } }, required: ["age"] };
const data = { age: 30 };
const validate = ajv.compile(schema);
console.log(validate(data) ? "Valid!" : ajv.errorsText(validate.errors));
Python
Install: Standard library (json)
import json
try:
    obj = json.loads('{"name":"Alice","age":30}')
    print("Valid JSON:", obj)
except json.JSONDecodeError as e:
    print("Invalid JSON:", e)
Python with jsonschema
Install: pip install jsonschema
import json, jsonschema
schema = {
    "type": "object",
    "properties": { "age": { "type": "integer" } },
    "required": ["age"]
}
data = {"age": 30}
try:
    jsonschema.validate(data, schema)
    print("Valid!")
except jsonschema.ValidationError as e:
    print("Schema validation error:", e)
Go
Install: Standard library (encoding/json)
package main
import (
  "encoding/json"
  "fmt"
)
func main() {
  data := []byte(`{"name":"Alice","age":30}`)
  var obj map[string]interface{}
  if err := json.Unmarshal(data, &obj); err != nil {
    fmt.Println("Invalid JSON:", err)
  } else {
    fmt.Println("Valid JSON:", obj)
  }
}
Java
Install: com.fasterxml.jackson.core:jackson-databind
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
  public static void main(String[] args) {
    String json = "{"name":"Alice","age":30}";
    try {
      Object obj = new ObjectMapper().readTree(json);
      System.out.println("Valid JSON: " + obj);
    } catch (Exception e) {
      System.out.println("Invalid JSON: " + e.getMessage());
    }
  }
}
C#
Install: Standard library (System.Text.Json)
using System;
using System.Text.Json;
class Program {
  static void Main() {
    string json = "{"name":"Alice","age":30}";
    try {
      var doc = JsonDocument.Parse(json);
      Console.WriteLine("Valid JSON!");
    } catch (JsonException e) {
      Console.WriteLine("Invalid JSON: " + e.Message);
    }
  }
}
PHP
Install: Standard library (json_decode)
<?php
$json = '{"name":"Alice","age":30}';
$obj = json_decode($json);
if (json_last_error() === JSON_ERROR_NONE) {
  echo "Valid JSON";
} else {
  echo "Invalid JSON: " . json_last_error_msg();
}
Ruby
Install: Standard library (json)
require 'json'
begin
  obj = JSON.parse('{"name":"Alice","age":30}')
  puts "Valid JSON!"
rescue JSON::ParserError => e
  puts "Invalid JSON: #{e.message}"
end
Bash (Linux/macOS) with jq
Install: brew install jq (or apt-get install jq)
echo '{"name":"Alice","age":30}' | jq empty && echo "Valid" || echo "Invalid"
Rust
Install: cargo add serde_json
fn main() {
  let data = r#"{"name":"Alice","age":30}"#;
  match serde_json::from_str::<serde_json::Value>(data) {
    Ok(_) => println!("Valid JSON!"),
    Err(e) => println!("Invalid JSON: {}", e),
  }
}
Kotlin
Install: Standard library (org.json)
import org.json.JSONObject
fun main() {
  try {
    val obj = JSONObject("{\"name\":\"Alice\",\"age\":30}")
    println("Valid JSON: $obj")
  } catch (e: Exception) {
    println("Invalid JSON: ${e.message}")
  }
}
Swift
Install: Standard library (JSONSerialization)
import Foundation
let json = "{\"name\":\"Alice\",\"age\":30}"
if let data = json.data(using: .utf8) {
  do {
    let _ = try JSONSerialization.jsonObject(with: data)
    print("Valid JSON!")
  } catch {
    print("Invalid JSON: \(error)")
  }
}
TypeScript
Install: Standard library
const jsonString = '{"name":"Alice","age":30}';
try {
  const obj = JSON.parse(jsonString);
  console.log("Valid JSON:", obj);
} catch (e) {
  console.error("Invalid JSON!", e.message);
}
SQL (PostgreSQL)
Install: Standard (with jsonb functions)
SELECT '{"name":"Alice","age":30}'::jsonb; -- Will error if not valid JSON
MySQL
Install: Standard (5.7+)
SELECT JSON_VALID('{"name":"Alice","age":30}');
PowerShell
Install: Standard
$json = '{"name":"Alice","age":30}'
try {
  $obj = $json | ConvertFrom-Json
  Write-Output "Valid JSON!"
} catch {
  Write-Output "Invalid JSON: $($_.Exception.Message)"
}
Perl
Install: cpan JSON
use JSON;
my $str = '{"name":"Alice","age":30}';
eval { decode_json($str) };
print $@ ? "Invalid JSON: $@" : "Valid JSON!";
Dart
Install: Standard library (dart:convert)
import 'dart:convert';
void main() {
  const jsonString = '{"name":"Alice","age":30}';
  try {
    final obj = jsonDecode(jsonString);
    print('Valid JSON: $obj');
  } catch (e) {
    print('Invalid JSON: $e');
  }
}
Elixir
Install: mix deps.get jason
json = ~s({"name":"Alice","age":30})
case Jason.decode(json) do
  {:ok, _} -> IO.puts("Valid JSON!")
  {:error, err} -> IO.puts("Invalid JSON: #{err}")
end
Scala
Install: libraryDependencies += "com.typesafe.play" %% "play-json" % "2.9.4"
import play.api.libs.json._
object Main extends App {
  val str = """{"name":"Alice","age":30}"""
  try {
    val json = Json.parse(str)
    println("Valid JSON!")
  } catch {
    case e: Exception => println("Invalid JSON: " + e.getMessage)
  }
}

Bu Araç Hakkında

Bu araç, dünyada milyonlarca kullanıcı tarafından tercih edilen hızlı ve gizlilik odaklı çevrimiçi araçların yaratıcısı Itself Tools ekibi tarafından geliştirildi. Basitlik, hız ve güvenilirliği ön planda tutan tarayıcı tabanlı araçlar konusunda yılların deneyimiyle, programcılar, analistler ve dijital profesyonellerin teknik görevlerini kolaylaştırmak amacıyla geliştirilen, geliştiricilere yönelik uygulamalar alanına da açıldık.