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
JSON'u yapıştırın
Tek bir örnek yeterlidir; birden fazla örnek, hangi alanların null olabileceğinin tespitini iyileştirir.
-
2
Stili seçin
Standart kütüphane `@dataclass`, Pydantic `BaseModel` veya yalnızca statik tip denetimi için `TypedDict`.
-
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
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 yerinefield(default_factory=list)’i kullanın. - İsteğe bağlıdır; varsayılan değer yoktur.
email: Optional[str]’de= Nonebulunmuyorsa bile argüman gereklidir. JSON semantiklerinize uygun olmalıdır. - Pydantic v1 vs v2: Sintaks ve davranışlar farklıdır (
Configsınıfı ilemodel_configarasında;validatorilefield_validatorarası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’yistr’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
ASCII Tablosu Referansı
NUL, LF ve DEL dahil her kod için ondalık, onaltılık, sekizlik ve ikili değerlerle HTML sayısal karakter başvurusu gösterimini sunan tam ASCII tablosu.
HTML Karakter Referansı
HTML varlıklarının aranabilir listesi; adlandırılmış ve sayısal kodlarıyla birlikte özel karakter ve semboller için tek tıkla kopyalama.
Klavye kısayolları başvurusu
macOS, Windows ve Linux’ta VS Code, Chrome ve GNU Readline kullanan Bash için belgelenmiş varsayılan kısayolları arayın.
FPS Sayacı
requestAnimationFrame ile tarayıcı FPS değerini ölçün: yumuşatma, en düşük ve en yüksek kare hızı, uyarı eşiği ve isteğe bağlı grafik. Yerel çalışır, yükleme ve API yoktur.
EditorConfig Oluşturucu
Girinti stili ve boyutu, satır sonu, karakter kümesi ve boşluk kurallarınızla bir .editorconfig dosyası oluşturarak IDE ve editörler arasında tutarlı biçimlendirme sağlayın.
E-posta Doğrulayıcı
Bir e-posta adresini doğrulayın: RFC 5322 sözdizimi kontrolü, canlı MX kaydı sorgulama, ayrıca yerel kısım, alan adı ve uzunluk bilgileri. Hiçbir e-posta gönderilmez.
Araç diğer dillerde mevcuttur
- JSON ถึงคลาสข้อมูลใน Python [TH]
- JSON a Dataclass de Python [ES]
- JSON para Dataclass em Python [PT]
- JSON till Python-dataklass [SV]
- JSONからPythonデータクラスへの変換 [JA]
- JSON vers Dataclass Python [FR]
- Từ JSON đến lớp dữ liệu Python [VI]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON zu Python Dataclass [DE]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- JSON ke Dataclass Python [ID]
- JSON do klasy danych w Pythonie [PL]
- JSON to Python Dataclass [EN]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- 从 JSON 到 Python 数据类 [ZH]