JSON'dan Python Veri Sınıfına

Bir JSON örneğini yapıştırın ve her alan için tür ipuçları içeren bir @dataclass (veya Pydantic BaseModel) elde edin, uygun durumlarda str, int, float, bool, Optional[...] ve List[...]. Yatay olarak yerleştirilmiş nesneler kendi veri sınıflarını oluşturur. Çıkış PEP 8 formatında olup bir Python dosyasına yapıştırmaya hazırdır.

JSON'ı bir veri sınıfına nasıl dönüştürürüz

  1. 1

    JSON'u yapıştırın

    Tek bir örnek yeterlidir; birden fazla örnek, hangi alanların null olabileceğinin tespitini iyileştirir.

  2. 2

    Stili seçin

    Standart kütüphane `@dataclass`, Pydantic `BaseModel` veya yalnızca statik tip denetimi için `TypedDict`.

  3. 3

    Python sürümünü seçin

    `list[str]` sentaksı için 3.9+, `|` birleşim türleri için 3.10+, `Optional[...]`/`List[...]` için ise 3.8.

  4. 4

    Kodu kopyalayın

    Bir kök sınıf ve iç içe yerleştirilmiş sınıflar. Bunları bir `.py` dosyasına yapıştırın ve içe aktarın.

Örnek çıktı: standart @dataclass

Giriş:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

Çıkış (Python 3.10+):

from dataclasses import dataclass, field
from typing import Optional


@dataclass
class User:
    first_name: str
    age: int
    tags: list[str] = field(default_factory=list)
    email: Optional[str] = None

Aynı girdi, Pydantic ile

from typing import Optional
from pydantic import BaseModel


class User(BaseModel):
    first_name: str
    age: int
    email: Optional[str] = None
    tags: list[str] = []

Tür Haritalaması

JSON değer Python türü
karakter dizisi str
tam sayı int
Sayı (onluk) float
Boole bool
boş (tek başına görüldü) None
boş + diğer tür Optional[T]
ISO tarih dizisi date (Python 3.7+)
ISO tarih ve saat datetime
Bir türden oluşan dizi list[T]
karışık dizi list[Union[T1, T2]]
nesne iç içe sınıf

Dataclass, Pydantic ve TypedDict

Tür Kullanım Zamanı
@dataclass Standart kütüphane çözümü, çalışma zamanı doğrulaması yoktur
Pydantic Çalışma zamanı doğrulama ve zorlama (FastAPI, ayarlar)
TypedDict Sadece statik tip kontrolü; örnek sınıfı yoktur
attrs attrs üzerinde standartlaştırılmış eski projeler

Yaygın Hatalar

  • Değiştirilebilir varsayılan değerler için default_factory’i unutmak. list[str] = [] varsayılan değeri, tüm örneklerde ortak kullanılan bir veri sınıfı tuzağıdır; bunun yerine field(default_factory=list)’i kullanın.
  • İsteğe bağlıdır; varsayılan değer yoktur. email: Optional[str]’de = None bulunmuyorsa bile argüman gereklidir. JSON semantiklerinize uygun olmalıdır.
  • Pydantic v1 vs v2: Sintaks ve davranışlar farklıdır (Config sınıfı ile model_config arasında; validator ile field_validator arasında). Jeneratör varsayılan olarak v2 versiyonuna ayarlanır.
  • Birleşim sırası deseriyalizasyon için önemlidir. Pydantic, türleri tanımlama sırasına göre değerlendirir. Belirsizlik olasıyse en spesifik türü önce belirtin (örneğin int’yi str’ten önce).

Sık Sorulan Sorular

Doğrulama işlemi gerektirmeyen basit değer tutucuları için veri sınıfıdır.çalışma zamanında doğrulama, zorlama veya FastAPI entegrasyonu gerekiyorsa Pydantic kullanılır. Sadece statik tip kontrolüne ihtiyaç duyuluyor ve sınıf örnekleri istenmiyorsa TypedDict tercih edilir (örneğin mypy, pyright ortamlarında).

Python 3.10 ve üzeri sürümlerinde | birleşmeleri ile list[str] sözdizimi yerel olarak desteklenmektedir; bu nedenle uygun değildir. Ancak PEP 563 dizgi anotasyonları aracılığıyla daha yeni sözdizimin kullanılması gereken 3.7–3.9 sürümleri projeleri için faydalıdır. Jeneratör gerekli olduğunda uyarı verir.

Her iç içe yerleştirilmiş nesne kendi sınıfını oluşturur. Kök sınıf bu nesneleri adlarıyla referans eder; böylece türleri tekrar kullanabilirsiniz. Dairesel referanslar tespit edilir ve işaretlenir.

Evet, Pydantic tarzını seçerseniz. FastAPI, istek/yanıt türleri olarak doğrudan Pydantic modellerini kullanır. İç veri işleme için @dataclass daha hafif bir yapıya sahiptir.

İlgili Araçlar

Araç diğer dillerde mevcuttur