Ce que fait cet outil
Un échantillon JSON devient des classes Python, une par objet.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
from pydantic import BaseModel, Field
class Address(BaseModel):
city: str
class Root(BaseModel):
id: int
first_name: str = Field(alias="firstName")
address: Address
Les enfants sont déclarés d’abord : une classe doit exister avant qu’une autre en annote un champ. La sortie vise un Python moderne — list[str] et int | str sont écrits directement, ce qui demande 3.10 ou plus.
Trois styles, trois coûts différents
| style | ce qu’il vous donne | ce qu’il coûte |
|---|---|---|
| Pydantic | la validation à la frontière, des alias pour les clés renommées | une dépendance, et des objets qui ne sont pas ordinaires |
| dataclass | un conteneur simple, bibliothèque standard seule | aucune validation, et pas d’alias pour une clé renommée |
| TypedDict | des annotations pour les dictionnaires que vous avez déjà | rien à l’exécution — et donc aucun contrôle non plus |
La structure est identique dans les trois ; ce qui change, c’est ce que le type fait pour vous.
Les mots réservés ne cassent plus le fichier
{"class": 1} produisait :
class Root(BaseModel):
class: int
ce qui n’est pas du Python — le fichier ne s’analyse même pas. Les mots réservés reçoivent maintenant un tiret bas, et l’alias Pydantic garde la clé :
class_: int = Field(alias="class")
C’était un vrai défaut, trouvé en écrivant cette page puis corrigé. TypedDict s’en tire autrement : une clé qui ne peut pas être un nom d’attribut fait basculer toute la définition vers la syntaxe fonctionnelle, Root = TypedDict('Root', {"class": int}), où les clés sont des chaînes et où tout passe.
Ce qu’un échantillon ne peut pas vous dire
Rien n’est | None et rien n’a de valeur par défaut : chaque champ est obligatoire, parce que l’échantillon le contenait. Un null donne le type None, qui n’accepte rien d’autre — si le champ est « une chaîne, parfois nulle », la retouche est str | None, et = None s’il peut être absent.
Deux clés qui donnent le même snake_case — fooBar et foo_bar — sont tenues séparées par un suffixe numéroté plutôt que fondues, et l’alias garde trace de laquelle était laquelle.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.