JSON vers Dataclass Python

Collez un exemple JSON et obtenez un @dataclass (ou BaseModel Pydantic) avec des annotations de type pour chaque champ, str, int, float, bool, Optional[...] et List[...] lorsque c’est approprié. Les objets imbriqués deviennent leurs propres dataclasses. La sortie est formatée selon PEP 8 et prête à être collée dans un fichier Python.

Comment convertir JSON en dataclass

  1. 1

    Collez le JSON

    Un seul échantillon fonctionne ; plusieurs échantillons améliorent la détection de nullabilité.

  2. 2

    Choisissez le style

    Solution de bibliothèque standard `@dataclass`, `BaseModel` Pydantic, ou `TypedDict` pour la vérification de type statique uniquement.

  3. 3

    Choisissez la version de Python

    3.9+ pour la syntaxe `list[str]`, 3.10+ pour les types d'union `|`, 3.8 pour `Optional[...]` / `List[...]`.

  4. 4

    Copiez le code

    Une classe racine plus des classes imbriquées. Collez dans un fichier `.py` et importez.

Exemple de sortie : @dataclass standard

Entrée :

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

Sortie (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

Même entrée avec Pydantic

from typing import Optional
from pydantic import BaseModel


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

Mappage des types

Valeur JSON Type Python
chaîne str
entier int
nombre (décimal) float
booléen bool
null (vu seul) None
null + autre type Optional[T]
chaîne de date ISO date (Python 3.7+)
date-heure ISO datetime
tableau d’un type list[T]
tableau mixte list[Union[T1, T2]]
objet Classe imbriquée

Dataclass vs Pydantic vs TypedDict

Variante Quand utiliser
@dataclass Solution de bibliothèque standard, pas de validation à l’exécution
Pydantic Validation à l’exécution et coercition (FastAPI, paramètres)
TypedDict Vérification de type statique uniquement, pas de classe d’instance
attrs Projets hérités qui se sont standardisés sur attrs

Erreurs courantes

  • Oublier default_factory pour les valeurs par défaut mutables. Un défaut list[str] = [] est un piège de dataclass (partagé entre les instances). Utilisez field(default_factory=list).
  • Optionnel sans défaut. email: Optional[str] sans = None nécessite toujours l’argument. Faites correspondre votre sémantique JSON.
  • Pydantic v1 vs v2. La syntaxe et les comportements diffèrent (classe Config vs model_config, validator vs field_validator). Le générateur par défaut est v2.
  • L’ordre des unions est important pour la désérialisation. Pydantic essaie les types dans l’ordre de déclaration. Mettez le plus spécifique en premier (par exemple, int avant str) si l’ambiguïté est possible.

Questions fréquentes

Dataclass pour des conteneurs de valeurs simples sans validation. Pydantic lorsque vous souhaitez une validation à l’exécution, une coercition ou une intégration FastAPI. TypedDict lorsque vous avez seulement besoin d’une vérification de type statique (mypy, pyright) et ne souhaitez pas d’instances de classe.

Pas pour Python 3.10+ où les unions | et la syntaxe list[str] sont natives. Utile pour les projets 3.7-3.9 pour utiliser la nouvelle syntaxe via les annotations de chaîne PEP 563. Le générateur avertit lorsqu’il est nécessaire.

Chaque objet imbriqué devient sa propre classe. La classe racine les référence par nom, vous pouvez donc réutiliser les types. Les références circulaires sont détectées et signalées.

Oui, si vous choisissez la variante Pydantic. FastAPI utilise les modèles Pydantic comme types de requête/réponse directement. Pour le transfert de données internes, @dataclass est plus léger.

Outils similaires

Outil disponible dans d’autres langues