JSON in Dataclass Python
Incolla un campione JSON e ottieni un @dataclass (o BaseModel di Pydantic) con suggerimenti di tipo per ogni campo, str, int, float, bool, Optional[...] e List[...] dove appropriato. Gli oggetti annidati diventano le proprie dataclass. L’output è formattato secondo PEP 8 e pronto per essere incollato in un file Python.
Come convertire JSON in una dataclass
-
1
Incolla il JSON
Un singolo campione funziona; più campioni migliorano il rilevamento della nullabilità.
-
2
Scegli lo stile
Libreria standard `@dataclass`, Pydantic `BaseModel`, o `TypedDict` solo per il controllo statico dei tipi.
-
3
Scegli la versione di Python
3.9+ per la sintassi `list[str]`, 3.10+ per i tipi unione `|`, 3.8 per `Optional[...]` / `List[...]`.
-
4
Copia il codice
Una classe radice più quelle annidate. Incolla in un file `.py` e importa.
Esempio di output: standard @dataclass
Input:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
Output (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
Stesso input con Pydantic
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
first_name: str
age: int
email: Optional[str] = None
tags: list[str] = []
Mappatura dei tipi
| Valore JSON | Tipo Python |
|---|---|
| stringa | str |
| intero | int |
| numero (decimale) | float |
| booleano | bool |
| null (visto da solo) | None |
| null + altro tipo | Optional[T] |
| stringa data ISO | date (Python 3.7+) |
| data e ora ISO | datetime |
| array di un tipo | list[T] |
| array misto | list[Union[T1, T2]] |
| oggetto | Classe annidata |
Dataclass vs Pydantic vs TypedDict
| Tipo | Quando usarlo |
|---|---|
@dataclass |
Soluzione della libreria standard, senza validazione runtime |
| Pydantic | Validazione e coercizione runtime (FastAPI, impostazioni) |
TypedDict |
Solo per il controllo statico dei tipi, senza classe di istanza |
attrs |
Progetti legacy che si sono standardizzati su attrs |
Errori comuni
- Dimenticare
default_factoryper i valori mutabili. Un valore predefinitolist[str] = []è una trappola per dataclass (condiviso tra le istanze). Usafield(default_factory=list). - Opzionale senza predefinito.
email: Optional[str]senza= Nonerichiede comunque l’argomento. Abbina la semantica del tuo JSON. - Pydantic v1 vs v2. La sintassi e i comportamenti differiscono (classe
Configvsmodel_config,validatorvsfield_validator). Il generatore predefinito è v2. - L’ordine dell’unione è importante per la deserializzazione. Pydantic prova i tipi nell’ordine di dichiarazione. Metti il più specifico per primo (ad es.
intprima distr) se l’ambiguità è possibile.
Domande frequenti
Dataclass per semplici contenitori di valori senza validazione. Pydantic quando desideri validazione runtime, coercizione o integrazione con FastAPI. TypedDict quando hai solo bisogno di controllo statico dei tipi (mypy, pyright) e non vuoi istanze di classe.
Non per Python 3.10+ dove le unioni | e la sintassi list[str] sono native. Utile per progetti 3.7-3.9 per utilizzare la sintassi più recente tramite le annotazioni di stringa PEP 563. Il generatore avvisa quando è necessario.
Ogni oggetto annidato diventa la propria classe. La classe radice li fa riferimento per nome, quindi puoi riutilizzare i tipi. Riferimenti circolari vengono rilevati e segnalati.
Sì, se scegli il tipo Pydantic. FastAPI utilizza i modelli Pydantic come tipi di richiesta/riposta direttamente. Per lo spostamento interno dei dati, @dataclass è più leggero.
Strumenti correlati
Riferimento Tabella ASCII
Tabella ASCII completa da 0 a 127 con decimale, esadecimale, ottale, binario e riferimento numerico HTML per ogni carattere, inclusi i codici di controllo come NUL, LF e DEL.
Riferimento ai caratteri HTML
Elenco ricercabile delle entità HTML, dei loro codici nominati e numerici, e copia con un clic per caratteri e simboli speciali.
Generatore di lettere casuali
Genera lettere A-Z casuali. Scegli la quantità, usa maiuscole, minuscole o un mix, e applica il risultato a giochi, spunti o attività in classe.
Riferimento scorciatoie da tastiera
Cerca le scorciatoie predefinite documentate di VS Code, Chrome e Bash con GNU Readline su macOS, Windows e Linux.
Promemoria Markdown
Riferimento pratico Markdown con anteprime reali ed esempi pronti da copiare per titoli, elenchi, tabelle, codice, link, immagini e sintassi GFM.
Formatter HTML
Formatta HTML localmente nel browser con rientri di due o quattro spazi. L’HTML non viene caricato né validato.
Strumento disponibile in altre lingue
- JSON ke Dataclass Python [ID]
- JSONからPythonデータクラスへの変換 [JA]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON zu Python Dataclass [DE]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON do klasy danych w Pythonie [PL]
- JSON para Dataclass em Python [PT]
- JSON a Dataclass de Python [ES]
- JSON till Python-dataklass [SV]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON vers Dataclass Python [FR]
- JSON naar Python-dataclass [NL]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]