JSON'dan Python'a

JSON'dan Python dataclass'ları oluşturun

Örnek dene
Kök sınıf adı:

JSON Girişi

Python Çıktısı

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir
Python dataclass'ları burada görünecek…

JSON'dan Python Dataclass Dönüşümü Nedir?

JSON'dan Python dataclass dönüşümü, ham bir JSON nesnesini alır ve doğru tür açıklamalarıyla birlikte bir dizi Python dataclass tanımı üretir. PEP 557 (Python 3.7) ile sunulan Python'un dataclasses modülü, açıklamalı sınıf alanlarından __init__, __repr__ ve __eq__ metotlarını otomatik olarak oluşturur. JSON API'leri, yapılandırma dosyaları veya mesaj kuyrukları ile çalışırken dataclass'lar, verilerinize mypy gibi editörler ve tür denetleyicilerinin geliştirme zamanında doğrulayabileceği türlendirilmiş bir yapı kazandırır.

Python'un json.loads() fonksiyonu düz dict ve listeler döndürür. Bunlar çalışır, ancak tür bilgisi içermez: yanlış yazılmış bir anahtar hata fırlatmak yerine None döndürür ve editörünüz alan adlarını otomatik tamamlayamaz. Dataclass'lar, her JSON anahtarını adlandırılmış ve türlendirilmiş bir alana eşleyerek bu sorunu çözer. İç içe JSON nesneleri ayrı dataclass tanımlarına, diziler List[T] açıklamalarına, null değerler ise varsayılan değeri None olan Optional[T] türüne dönüşür.

Bu tanımları elle yazmak mekanik bir iştir. JSON'u okur, her alanın türünü değerinden çıkarsar, anahtarları camelCase ya da snake_case'den Python kurallarına dönüştürür ve null olabilir alanlar ile karma türlü diziler gibi uç durumları ele alırsınız. Bir dönüştürücü tüm bunları milisaniyeler içinde yapar. JSON yapıştırırsınız, doğru dataclass kodunu alırsınız ve işinize devam edersiniz.

Neden JSON'dan Python Dönüştürücü Kullanmalısınız?

JSON yapılarını elle Python sınıf tanımlarına çevirmek; örnek veriden türleri tahmin etmeyi, opsiyonel olanlardan önce zorunlu alanları sıralamayı ve API değiştiğinde her şeyi güncellemeyi gerektirir. Bir dönüştürücü bu zorluğu ortadan kaldırır.

Anında dataclass üretimi
JSON'unuzu yapıştırın ve bir saniyenin altında türlendirilmiş Python dataclass tanımlarını alın. İç içe nesneler, listeler ve opsiyonel alanlar otomatik olarak işlenir.
🔒
Gizliliği ön planda tutan işleme
Dönüşüm tamamen tarayıcınızda JavaScript kullanılarak gerçekleşir. JSON'unuz asla makinenizden çıkmaz. API anahtarları, tokenlar ve kullanıcı kayıtları gizli kalır.
📝
Doğru tür açıklamaları
Üretilen her alan, JSON değerinden çıkarsanan bir Python tür açıklaması içerir: str, int, float, bool, List[T] veya null'lar için Optional[T].
📦
Kurulum veya kayıt gerektirmez
Sayfayı açın ve JSON'unuzu yapıştırın. Python ortamı, pip paketi veya hesap oluşturma gerekmez.

JSON'dan Python'a Kullanım Senaryoları

REST API İstemci Geliştirme
API yanıt örneklerinden dataclass'lar oluşturun. Üçüncü taraf bir REST endpoint'in döndürdüğü JSON'u yapıştırın ve requests veya httpx için hazır tür güvenli Python sınıfları elde edin.
FastAPI İstek/Yanıt Modelleri
Bir JSON yük şeklinden başlayarak dataclass tanımları oluşturun. FastAPI route handler'larında otomatik doğrulama elde etmek için bunları Pydantic modellerine dönüştürün.
Veri Boru Hattı Şemaları
ETL boru hatları için türlendirilmiş kayıt yapıları tanımlayın. Kafka, RabbitMQ veya SQS'ten gelen örnek bir JSON mesajı yapıştırın ve beklenen şekli belgeleyen dataclass'lar oluşturun.
Yapılandırma Dosyası Ayrıştırma
JSON yapılandırma dosyalarını türlendirilmiş Python sınıflarına dönüştürün. Yapılandırmanızı json.load() ile yükleyin, ardından editör otomatik tamamlama ve tür denetimi için bir dataclass örneği oluşturun.
Test Sabiti Üretimi
Örnek JSON verilerinden türlendirilmiş sabitler oluşturun. QA mühendisleri, API yanıt anlık görüntülerini yapıştırarak pytest test paketlerinde kullanmak üzere dataclass tanımları üretebilir.
Python Tür Açıklamalarını Öğrenmek
Öğrenciler herhangi bir JSON yapısını yapıştırarak Python'un bunu tür ipuçlarıyla nasıl temsil ettiğini görebilir. Üretilen kod, List, Optional, iç içe sınıflar ve varsayılan değerleri bağlam içinde gösterir.

JSON'dan Python'a Tür Eşleme

Her JSON değeri belirli bir Python tür açıklamasına eşlenir. Aşağıdaki tablo, dönüştürücünün her JSON türünü nasıl çevirdiğini gösterir; hem typing modülü söz dizimi (Python 3.7+) hem de Python 3.10'dan itibaren kullanılabilen yerleşik söz dizimi verilmiştir.

JSON TürüÖrnekPython (typing)Python 3.10+
string"hello"strstr
number (integer)42intint
number (float)3.14floatfloat
booleantrueboolbool
nullnullOptional[str]str | None
object{"k": "v"}@dataclass classnested model
array of strings["a", "b"]List[str]list[str]
array of objects[{"id": 1}]List[Item]list[Item]
mixed array[1, "a"]List[Any]list[Any]

Dataclass Dekoratör Başvurusu

@dataclass dekoratörü, üretilen sınıfın davranışını değiştiren çeşitli parametreler kabul eder. Bu başvuru, JSON'dan türetilen verilerle çalışırken en sık kullanılan seçenekleri kapsar.

Dekoratör / AlanDavranışNe Zaman Kullanılır
@dataclassGenerates __init__, __repr__, __eq__ from field annotationsStandard dataclasses
@dataclass(frozen=True)Makes instances immutable (hashable, no attribute reassignment)Config objects, dict keys
@dataclass(slots=True)Uses __slots__ for lower memory and faster attribute accessPython 3.10+, large datasets
@dataclass(kw_only=True)All fields require keyword arguments in __init__Python 3.10+, many fields
field(default_factory=list)Sets a mutable default without sharing state between instancesList/dict/set defaults

dataclass, Pydantic ve TypedDict Karşılaştırması

Python'un JSON'dan türlendirilmiş yapılar tanımlamak için üç yaygın yolu vardır. Her biri farklı bir kullanım senaryosuna uygundur. Dataclass'lar bağımlılığı olmayan standart kütüphane seçeneğidir. Pydantic çalışma zamanı doğrulaması ekler. TypedDict, yeni bir sınıf oluşturmadan düz dict'lere açıklama ekler.

@dataclass
Standart kütüphane (Python 3.7+). __init__, __repr__ ve __eq__ üretir. Çalışma zamanı doğrulaması yapmaz. mypy ve serileştirme için dataclasses-json ile çalışır. Girdiyi kontrol ettiğiniz dahili veri yapıları için en uygundur.
BaseModel (Pydantic)
Üçüncü taraf kütüphane. Türleri ve kısıtlamaları çalışma zamanında doğrular. JSON'u doğrudan model_validate_json() ile ayrıştırır. FastAPI, ayar yönetimi ve güvenilmeyen girdi alan her kod için standart tercih.
TypedDict
Standart kütüphane (Python 3.8+). Normal dict'lere tür ipuçları ekler. __init__ veya metot üretilmez. Değerlere düz dict erişimiyle ulaşılır. Tür denetimi isteyip dict arayüzünü korumak istediğinizde, örneğin eski kod tabanlarında kullanın.

Kod Örnekleri

Bu örnekler, üretilen dataclass'ların Python'da nasıl kullanılacağını, JavaScript'ten programlı olarak nasıl üretileceğini ve Pydantic ile CLI araçları gibi alternatif yaklaşımların nasıl kullanılacağını gösterir.

Python (dataclasses)
from dataclasses import dataclass
from typing import List, Optional
import json

@dataclass
class Address:
    street: str
    city: str
    zip: str

@dataclass
class User:
    id: int
    name: str
    email: str
    active: bool
    score: float
    address: Address
    tags: List[str]
    metadata: Optional[str] = None

raw = '{"id":1,"name":"Alice","email":"alice@example.com","active":true,"score":98.5,"address":{"street":"123 Main St","city":"Springfield","zip":"12345"},"tags":["admin","user"],"metadata":null}'
data = json.loads(raw)

# Reconstruct nested objects manually
addr = Address(**data["address"])
user = User(**{**data, "address": addr})
print(user.name)     # -> Alice
print(user.address)  # -> Address(street='123 Main St', city='Springfield', zip='12345')
JavaScript (generate Python from JSON)
// Minimal JSON-to-Python-dataclass generator in JS
function jsonToPython(obj, name = "Root") {
  const classes = [];
  function infer(val, fieldName) {
    if (val === null) return "Optional[str]";
    if (typeof val === "string") return "str";
    if (typeof val === "number") return Number.isInteger(val) ? "int" : "float";
    if (typeof val === "boolean") return "bool";
    if (Array.isArray(val)) {
      const first = val.find(v => v !== null);
      return first ? `List[${infer(first, fieldName + "Item")}]` : "List[Any]";
    }
    if (typeof val === "object") {
      const clsName = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
      build(val, clsName);
      return clsName;
    }
    return "Any";
  }
  function build(obj, cls) {
    const fields = Object.entries(obj).map(([k, v]) => `    ${k}: ${infer(v, k)}`);
    classes.push(`@dataclass\nclass ${cls}:\n${fields.join("\n")}`);
  }
  build(obj, name);
  return classes.join("\n\n");
}

const data = { id: 1, name: "Alice", scores: [98, 85] };
console.log(jsonToPython(data, "User"));
// @dataclass
// class User:
//     id: int
//     name: str
//     scores: List[int]
Python (Pydantic BaseModel alternative)
from pydantic import BaseModel
from typing import List, Optional

class Address(BaseModel):
    street: str
    city: str
    zip: str

class User(BaseModel):
    id: int
    name: str
    email: str
    active: bool
    score: float
    address: Address
    tags: List[str]
    metadata: Optional[str] = None

# Pydantic parses and validates JSON in one step
raw = '{"id":1,"name":"Alice","email":"alice@example.com","active":true,"score":98.5,"address":{"street":"123 Main St","city":"Springfield","zip":"12345"},"tags":["admin","user"],"metadata":null}'
user = User.model_validate_json(raw)
print(user.name)              # -> Alice
print(user.model_dump_json()) # -> re-serializes to JSON
CLI (datamodel-code-generator)
# Install the generator
pip install datamodel-code-generator

# Generate dataclasses from a JSON file
datamodel-codegen --input data.json --output models.py --output-model-type dataclasses.dataclass

# Generate Pydantic models instead
datamodel-codegen --input data.json --output models.py

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice", "tags": ["admin"]}' | \
  datamodel-codegen --output-model-type dataclasses.dataclass
# Output:
# @dataclass
# class Model:
#     id: int
#     name: str
#     tags: List[str]

Sıkça Sorulan Sorular

Python dataclass ile normal sınıf arasındaki fark nedir?
Dataclass, alan açıklamalarından __init__, __repr__ ve __eq__ metotlarını otomatik oluşturmak için @dataclass dekoratörünü kullanır. Normal bir sınıfta bu metotları kendiniz yazmanız gerekir. Sınıf öncelikli olarak veri tuttuğunda — ki JSON'dan türetilen yapılar için bu genellikle böyledir — dataclass'lar şablonu azaltır.
Dataclass'ları doğrudan JSON serileştirmesiyle kullanabilir miyim?
Standart kütüphanenin json modülü, dataclass örneklerini varsayılan olarak serileştiremez. Bir dataclass'ı dict'e dönüştürmek için dataclasses.asdict() kullanın, ardından bunu json.dumps() fonksiyonuna geçirin. Daha fazla esneklik için dataclasses-json kütüphanesi .to_json() ve .from_json() metotları ekler; Pydantic modelleri ise serileştirmeyi doğrudan destekler.
Dönüştürücü iç içe JSON nesnelerini nasıl işler?
Her iç içe nesne ayrı bir @dataclass tanımına dönüşür. "address" adlı bir JSON alanı "street" ve "city" içeren bir nesne içeriyorsa dönüştürücü bir Address dataclass'ı oluşturur ve üst alanı address: Address olarak açıklar. Derin iç içe yapılar, bağımlılık sırasına göre birden fazla dataclass tanımı üretir.
Bir JSON alanı null olduğunda ne olur?
Null alanlar Optional[str] (veya bağlamdan çıkarsanabiliyorsa uygun tür) olarak açıklanır ve varsayılan değerleri None olur. Varsayılan değerli alanların dataclass'ta zorunlu alanlardan sonra gelmesi gerektiğinden dönüştürücü, opsiyonel alanları sınıf tanımının sonuna yerleştirir.
JSON için dataclass ile Pydantic model arasında fark var mı?
Dataclass'lar standart kütüphanenin parçasıdır ve çalışma zamanında veri doğrulaması yapmaz. Pydantic modelleri türleri doğrular, kısıtlamaları zorlar ve ham JSON dizgelerini doğrudan ayrıştırabilir. Dış kaynaklardan JSON alıyorsanız ve hatalı biçimlendirilmiş veriyi reddetmeniz gerekiyorsa Pydantic daha uygun seçimdir. Girdiyi güvendiğiniz dahili veri aktarımı için dataclass'lar daha hafiftir ve harici bağımlılığı yoktur.
Python dataclass'larında camelCase JSON anahtarlarını nasıl işlerim?
Python kuralı, değişken adları için snake_case kullanır. Dönüştürücü "firstName" gibi camelCase anahtarları first_name gibi snake_case alanlara çevirir. JSON'dan geri serileştirmeniz gerekiyorsa, iki adlandırma kuralı arasında eşleme yapan bir yapılandırmayla dataclasses-json kütüphanesini kullanın ya da özel bir __post_init__ metodu yazın.
Bu dönüştürücü List[str] yerine list[str] gibi Python 3.10+ söz dizimini destekliyor mu?
Dönüştürücü, Python 3.7'den 3.12'ye kadar maksimum uyumluluk için typing modülü içe aktarmalarını (List, Optional) üretir. Projeniz Python 3.10 veya üzerini hedefliyorsa List[str] yerine list[str], Optional[str] yerine str | None kullanabilirsiniz. Yukarıdaki tür eşleme tablosunda her iki biçim de gösterilmektedir.