JSON do klasy danych w Pythonie
Wklej przykładowy kod JSON, a otrzymasz @dataclass (lub Pydantic BaseModel) ze wskazówkami typów dla każdego pola: str, int, float, bool, Optional[...] oraz List[...] tam, gdzie to właściwe. Obiekty zagnieżdżone stają się osobnymi klasami danych. Wynik jest sformatowany zgodnie z PEP 8 i gotowy do wklejenia do pliku Pythona.
Jak przekształcić JSON w klasę danych
-
1
Wklej plik JSON
Wystarczy jedna próbka; wiele próbek poprawia wykrywanie pól, które mogą przyjmować wartość null.
-
2
Wybierz styl
Biblioteka standardowa `@dataclass`, Pydantic `BaseModel` lub `TypedDict` wyłącznie do statycznej kontroli typów.
-
3
Wybierz wersję Pythona
3.9+ dla składni `list[str]`, 3.10+ dla typów unii `|`, 3.8 dla `Optional[...]`/`List[...]`.
-
4
Skopiuj kod
Jedna klasa główna oraz klasy zagnieżdżone. Wklej je do pliku `.py` i zaimportuj.
Przykład wyniku – standardowy @dataclass
Wejście:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
Wyjście (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
To samo wejście z Pydantic
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
first_name: str
age: int
email: Optional[str] = None
tags: list[str] = []
Mapowanie typów
| Wartość JSON | Typ w Pythonie |
|---|---|
| ciąg znaków | str |
| liczba całkowita | int |
| liczba (dziesiętna) | float |
| wartość logiczna | bool |
| null (występuje samodzielnie) | None |
| null + inny typ | Optional[T] |
| ciąg daty ISO | date (Python 3.7+) |
| data i godzina ISO | datetime |
| tablica jednego typu | list[T] |
| tablica mieszana | list[Union[T1, T2]] |
| obiekt | klasa zagnieżdżona |
Dataclass vs Pydantic vs TypedDict
| Wariant | Kiedy stosować |
|---|---|
@dataclass |
Rozwiązanie z biblioteki standardowej, bez walidacji w czasie wykonania |
| Pydantic | Walidacja i konwersja typów w czasie wykonania (FastAPI, ustawienia) |
TypedDict |
Tylko statyczna kontrola typów, bez klasy instancji |
attrs |
Starsze projekty, które ustandaryzowały się na attrs |
Najczęstsze błędy
- Pominięcie
default_factorydla zmiennych wartości domyślnych. Wartość domyślnalist[str] = []to pułapka dataclass (współdzielona między instancjami). Użyjfield(default_factory=list). - Optional bez wartości domyślnej.
email: Optional[str]bez= Nonenadal wymaga podania argumentu. Dopasuj to do semantyki swojego JSON-a. - Pydantic v1 a v2. Składnia i zachowanie różnią się (klasa
Configamodel_config,validatorafield_validator). Generator domyślnie używa v2. - Kolejność w unii ma znaczenie przy deserializacji. Pydantic próbuje typów w kolejności deklaracji. Umieść najbardziej szczegółowy typ jako pierwszy (np.
intprzedstr), jeśli możliwa jest niejednoznaczność.
Najczęściej zadawane pytania
Klasa danych do prostych obiektów bez żadnej walidacji. Pydantic, gdy potrzebujesz walidacji w czasie wykonania, konwersji typów lub integracji z FastAPI. TypedDict, gdy wymagana jest wyłącznie statyczna kontrola typów (np. w narzędziach takich jak mypy lub pyright) i nie potrzebujesz instancji klasy.
Niepotrzebny w Pythonie 3.10+, gdzie typy unii | oraz składnia list[str] są natywne. Przydatny w projektach 3.7–3.9 do stosowania nowszej składni za pomocą łańcuchowych adnotacji zgodnych z PEP 563. Generator ostrzega, gdy jest wymagany.
Każdy obiekt zagnieżdżony staje się osobną klasą. Klasa główna odwołuje się do nich po nazwie, dzięki czemu można ponownie wykorzystywać typy. Odwołania cykliczne są wykrywane i oznaczane.
Tak, jeśli wybierzesz wariant Pydantic. FastAPI bezpośrednio wykorzystuje modele Pydantic jako typy żądań i odpowiedzi. Do wewnętrznego przenoszenia danych @dataclass jest lżejszym rozwiązaniem.
Powiązane narzędzia
Tabela ASCII
Pełna tabela ASCII od 0 do 127 z zapisem dziesiętnym, szesnastkowym, ósemkowym i binarnym oraz notacją numerycznych odwołań HTML, w tym kodami sterującymi NUL, LF i DEL.
Referencja znaków HTML
Przeszukiwalna lista encji HTML wraz z ich kodami nazwanymi i liczbowymi oraz kopiowaniem jednym kliknięciem specjalnych znaków i symboli.
Skróty klawiaturowe
Wyszukuj udokumentowane skróty domyślne VS Code, Chrome i Bash z GNU Readline w macOS, Windows i Linux.
Generator EditorConfig
Wygeneruj plik .editorconfig z własnymi regułami stylu i rozmiaru wcięć, końca linii, kodowania i białych znaków, aby uzyskać spójne formatowanie w różnych IDE i edytorach.
Walidator adresów e-mail
Zweryfikuj adres e-mail: sprawdzenie składni RFC 5322, sprawdzenie rekordu MX w czasie rzeczywistym oraz szczegóły dotyczące części lokalnej, domeny i długości. Żadna wiadomość nie jest wysyłana.
Formatowanie HTML
Formatuj HTML lokalnie w przeglądarce, używając wcięć dwóch lub czterech spacji. HTML nie jest wysyłany ani walidowany.
Narzędzie jest dostępne w innych językach
- JSON ke Dataclass Python [ID]
- JSON a Dataclass de Python [ES]
- JSON vers Dataclass Python [FR]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON zu Python Dataclass [DE]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON till Python-dataklass [SV]
- JSON para Dataclass em Python [PT]
- JSONからPythonデータクラスへの変換 [JA]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]