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
Generator konfiguracji webpack
Utwórz plik webpack.config.js dla webpacka 5 do czystego JavaScriptu, Reacta lub Vue: TypeScript, Babel, CSS lub Sass, obrazy, HtmlWebpackPlugin, serwer deweloperski i polecenie npm install.
Generator kolorów analogicznych
Twórz pięciokolorowe palety analogiczne z dowolnego koloru bazowego: klasyczną trójkę, dwie zewnętrzne barwy oraz wartości hex, RGB i HSL.
Generator fikcyjnych numerów telefonu
Generuj do 50 fikcyjnych numerów z oficjalnie zastrzeżonych zakresów w pięciu krajach.
Walidator XSD
Waliduj dokument XML wobec schematu XSD i zgłaszaj niezgodności elementów i typów z dokładnymi numerami wierszy.
Kod na obraz
Wklej kod, ustaw motyw, kolory, rozmiar czcionki, odstępy, nagłówek i numery wierszy, sprawdź podgląd canvas i pobierz PNG. Renderowanie zwykłego tekstu, bez podświetlania składni.
Dekoder Protocol Buffers
Dekoduj lokalnie bajty Protobuf z zapisu hex, Base64, Base64URL, tekstu lub pliku, analizuj pola i eksportuj prywatny raport.
Narzędzie jest dostępne w innych językach
- فئة بيانات من JSON إلى بايثون [AR]
- JSON zu Python Dataclass [DE]
- JSONからPythonデータクラスへの変換 [JA]
- JSON vers Dataclass Python [FR]
- JSON para Dataclass em Python [PT]
- JSON till Python-dataklass [SV]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- JSON ke Dataclass Python [ID]
- JSON a Dataclass de Python [ES]
- JSON to Python Dataclass [EN]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]