Génération de types

JSON en Pythondataclass et modèles Pydantic

Une clé absente et un champ présent valant null ne donnent pas la même valeur par défaut.

JSON en Python

Entrée JSON

Analyse et génération dans ce navigateur. L’entrée n’est ni envoyée ni enregistrée.

Source générée

Options de génération

Python 3.9+. Les métadonnées dataclass ne décodent ni ne valident. Pydantic 2.12.5 fournit load_models(source) pour la politique numérique choisie.

Les tableaux définissent le modèle d’élément Root. Pydantic load_models accepte un objet ou un tableau.

2 classes · 2 champs acceptant null

JSON en Python transforme des réponses API représentatives en une première définition de modèle. Pour repérer les champs parfois absents, fournissez plusieurs enregistrements de formes différentes, et pas seulement une réponse complète.

La conversion JSON vers Python peut produire des classes Python de la bibliothèque standard ou des modèles Pydantic avec validation à la lecture. Dans les deux cas, les échantillons révèlent des types observés : ils ne définissent pas toutes les règles de votre application.

Pourquoi choisir JSON en Python ?

Distinguer absence et valeur nulle

JSON en Python conserve le caractère obligatoire des champs toujours présents, même si null est autorisé. Une clé absente dans un autre échantillon reçoit en revanche la valeur par défaut None. Ces deux situations n’imposent pas les mêmes arguments à la construction du modèle.

Deux fiches d’objet relient un repère null creux et un emplacement absent à des valeurs par défaut différentes.

Retrouver les noms d’origine

Les mots réservés et les clés avec ponctuation deviennent des noms Python valides. Leur forme originale reste inscrite dans les métadonnées dataclass ou les alias Pydantic. Des suffixes déterministes distinguent les clés qui aboutiraient au même attribut.

Des clés irrégulières sont reliées à des attributs valides par deux chemins distincts de métadonnées et d’alias.

Préparer un modèle utilisable

01

Varier les échantillons

Acceptez comme racine un objet ou un tableau non vide composé uniquement d’objets. Chaque emplacement de tableau réunit les informations de tous ses éléments. Les clés supplémentaires des derniers enregistrements comptent donc aussi dans le modèle.

02

Choisir ce qui peut être omis

Le réglage initial ajoute None uniquement aux clés dont l’absence est observée. L’autre option rend tous les champs omissibles. Les dates restent str par défaut. Choisissez Decimal si les nombres décimaux ou exponentiels, et les entiers mélangés avec eux, doivent garder leur précision.

03

Attendre le résultat à jour

La génération démarre après 350 ms sans modification. Désactivez le mode automatique pour utiliser le bouton ou Ctrl/Cmd+Enter. Toute modification bloque immédiatement l’export de l’ancien résultat. Effacer et charger l’exemple conservent une annulation de l’entrée, des options et de la sortie.

Ce que contient le fichier généré

Deux familles de modèles

Le mode dataclass ne dépend que de la bibliothèque standard et place les champs obligatoires avant ceux ayant une valeur par défaut. Le mode Pydantic cible précisément la version 2.12.5. Les classes enfants précèdent leurs parents pour permettre l’import du fichier sous Python 3.9 ou ultérieur.

Une politique numérique explicite

Un groupe composé seulement d’entiers utilise int à précision arbitraire. Si des décimales ou exposants apparaissent, le groupe utilise float par défaut : les grands entiers fusionnés dans ce groupe peuvent aussi être arrondis. En mode Decimal, le chargeur lit les nombres décimaux sans étape float, y compris dans les conteneurs Any.

Des dates reconnues avec prudence

Le mode ISO reconnaît les dates de calendrier valides et les horodatages complets avec fuseau, limités à six chiffres de fractions de seconde. Toutes les chaînes non nulles au même emplacement doivent être du même genre. Une date invalide, sans fuseau ou plus précise reste str. Pydantic effectue la conversion à la lecture ; dataclass ne la fait pas.

Des attributs sans collision

Les champs suivent snake_case en ASCII. Les mots réservés, préfixes soulignés, noms model_* et méthodes BaseModel sont renommés. Clés vides, Unicode et caractères de contrôle gardent leurs alias. Les imports utilisent des noms internes distincts pour éviter les conflits avec des classes nommées Decimal ou BaseModel.

Les limites du contrat produit

Une dataclass ne décode pas les données
Les annotations et métadonnées json_key ne valident rien, ne renomment pas les clés entrantes et ne construisent ni objets imbriqués ni dates. Un dict transmis au constructeur reste un dict. asdict produit les noms d’attributs Python, sans appliquer les alias des métadonnées.
Charger avec la fonction Pydantic fournie
Installez pydantic==2.12.5 puis appelez load_models(source). La fonction applique json.loads selon la politique float ou Decimal avant model_validate, et retourne un modèle ou une liste. Un appel direct à model_validate_json ne fournit pas la même garantie Decimal. La sérialisation de Decimal produit normalement des chaînes JSON.
Présence et validation restent distinctes
Pydantic lit uniquement les alias JSON d’origine et refuse les propriétés inconnues avec extra="forbid". Optional[T] autorise null ; une valeur par défaut autorise l’omission. Absence et null explicite peuvent tous deux donner None : consultez model_fields_set pour les distinguer. Les conversions ordinaires de Pydantic s’appliquent, sans déduire de validation métier stricte.
Les échantillons incertains restent généraux
Des genres de valeurs incompatibles ou un champ toujours null donnent Any. Les tableaux vides donnent List[Any] et les objets enfants vides Dict[str, Any]. Ni enum, UUID, EmailStr, TypedDict, JSON Schema, OpenAPI ni ORM ne sont générés. Les racines scalaires et tableaux racines vides ou mixtes sont refusés.
Certaines clés et valeurs provoquent un refus
Sans alias, toute clé nécessitant un renommage bloque la génération. Les substituts Unicode isolés dans les clés sont également refusés. Le mode float refuse un dépassement de capacité ou une valeur non nulle qui devient zéro par sous-dépassement. L’arrondi binaire habituel demeure ; choisissez Decimal pour des décimales exactes.
Entrée stricte et capacité bornée
Pas de commentaires, virgules finales, clés dupliquées, réparation automatique, import de fichier, lecture d’URL ou exécution Python. Limites : 500 000 caractères en entrée, 50 000 nœuds, profondeur 40, 100 champs par objet fusionné, 200 classes, 1 000 caractères par clé ou nombre, exposant de valeur absolue 10 000 et 1 000 000 caractères en sortie.

Questions sur JSON en Python

Les objets imbriqués obtiennent-ils leurs propres types ?

Oui. Chaque objet enfant non vide reçoit une classe dans le même fichier. Les classes enfants sont définies avant leurs parents. Tous les éléments d’un tableau participent à la déduction. Cela décrit les types, mais une dataclass ne construit pas automatiquement les instances imbriquées.

Peut-on utiliser le convertisseur sans payer ?

Oui. JSON en Python est utilisable gratuitement sans créer de compte. Vous pouvez choisir les deux frameworks et exporter le fichier généré. Pour exécuter le résultat Pydantic dans votre projet, il faut y installer la version cible 2.12.5.

La conversion reste-t-elle disponible hors connexion ?

Une fois la page et ses composants chargés, la génération fonctionne dans le navigateur sans connexion. Si vous ouvrez la page pour la première fois hors ligne, son chargement n’est pas garanti. L’exécution du fichier Python exporté relève de votre propre environnement.

Comment charger une dataclass sans bibliothèque supplémentaire ?

C’est possible avec votre code de conversion, mais les dataclasses générées ici ne contiennent pas de décodeur. json.loads retourne des dictionnaires et listes. Vous devez mapper les noms et construire explicitement les objets enfants. Les métadonnées seules ne réalisent pas ces opérations.

Comment conserver les clés JSON dont le nom diffère des attributs Python ?

Gardez les alias activés. Pydantic utilise Field(alias=...) pour lire la clé originale. En dataclass, json_key conserve cette information pour votre adaptateur. Les collisions reçoivent un suffixe et la configuration Pydantic évite de lire par erreur le nom Python d’un autre champ.

Un cas de déduction mérite une amélioration ?

Tester le modèle sur des réponses réelles

Utilisez JSON en Python avec des clés absentes, des null et des nombres représentatifs, puis vérifiez le fichier exporté avec le code de lecture de votre application.