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
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.
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);
}
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));
import json
try:
obj = json.loads('{"name":"Alice","age":30}')
print("Valid JSON:", obj)
except json.JSONDecodeError as e:
print("Invalid JSON:", e)
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)
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)
}
}
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());
}
}
}
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
$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();
}
require 'json'
begin
obj = JSON.parse('{"name":"Alice","age":30}')
puts "Valid JSON!"
rescue JSON::ParserError => e
puts "Invalid JSON: #{e.message}"
end
echo '{"name":"Alice","age":30}' | jq empty && echo "Valid" || echo "Invalid"
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),
}
}
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}")
}
}
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)")
}
}
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);
}
SELECT '{"name":"Alice","age":30}'::jsonb; -- Will error if not valid JSON
SELECT JSON_VALID('{"name":"Alice","age":30}');
$json = '{"name":"Alice","age":30}'
try {
$obj = $json | ConvertFrom-Json
Write-Output "Valid JSON!"
} catch {
Write-Output "Invalid JSON: $($_.Exception.Message)"
}
use JSON;
my $str = '{"name":"Alice","age":30}';
eval { decode_json($str) };
print $@ ? "Invalid JSON: $@" : "Valid JSON!";
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');
}
}
json = ~s({"name":"Alice","age":30})
case Jason.decode(json) do
{:ok, _} -> IO.puts("Valid JSON!")
{:error, err} -> IO.puts("Invalid JSON: #{err}")
end
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.