Aller au contenu
Tout en local

JSON vers classe Dart

Convertissez un exemple JSON en une classe Dart avec fromJson, toJson et modèles imbriqués.

Entrée
Sortie

JSON vers classe Dart

Collez un exemple JSON et cet outil déduit la structure des données et génère une classe Dart correspondante, du type que vous écririez autrement à la main pour un modèle Flutter. Les objets imbriqués deviennent leurs propres classes, les tableaux deviennent des champs `List<...>` typés, et chaque classe est fournie avec un constructeur nommé, une fabrique `fromJson` et une méthode `toJson`, afin que le résultat s'intègre directement dans un projet Flutter ou Dart.

Les options contrôlent le style du code généré. "Nom de la classe" définit la classe racine; les classes imbriquées prennent le nom de leur clé JSON. "Sécurité null avec champs obligatoires" marque les champs présents dans chaque exemple comme `required` avec un type non-nullable, et les champs parfois absents ou null comme nullable et optionnels; désactivez-le pour rendre tous les champs nullable à la place. "Annotations json_serializable" remplace les corps `fromJson`/`toJson` écrits à la main par `@JsonSerializable()` et `@JsonKey`, qui délèguent à un fichier `.g.dart` généré. "Champs finaux" rend la classe immuable; "Générer copyWith" ajoute une méthode pour créer une copie modifiée sans muter l'original, et "Générer == et hashCode" ajoute l'égalité des valeurs pour que deux instances ayant les mêmes valeurs de champs soient égales. "Indentation" bascule entre 2 et 4 espaces.

Quand la même forme d'objet se répète (un tableau d'éléments ayant tous les mêmes champs, par exemple), l'outil réutilise une classe au lieu de générer un doublon pour chaque occurrence, et un champ absent de certaines entrées d'un tableau est correctement déduit comme optionnel plutôt que obligatoire. Les clés JSON qui ne sont pas des identifiants Dart valides, qui utilisent des casses différentes ou qui entrent en collision avec un mot clé ou un nom de méthode généré (comme `copyWith` ou `hashCode`) sont automatiquement renommées du côté Dart tandis que la clé d'origine est conservée pour l'encodage et le décodage.

Tout s'exécute localement dans votre navigateur: aucun exemple JSON n'est jamais téléchargé nulle part, ce qui est important s'il contient des données utilisateur réelles ou la forme de réponse d'une API interne. Copiez la classe, téléchargez-la en tant que fichier .txt ou renvoyez la sortie à l'entrée pour convertir un autre morceau imbriqué.

FAQ

Comment les objets imbriqués et les tableaux sont-ils traités?
Chaque objet imbriqué devient sa propre classe Dart nommée d'après le champ qui l'a introduit, et un tableau d'objets devient une List<TaClasse> typée. Si la même forme apparaît plus d'une fois, l'outil réutilise une seule classe au lieu de la dupliquer pour chaque occurrence.
Qu'est-ce qui change vraiment avec "Sécurité null avec champs obligatoires"?
Lorsqu'elle est activée, un champ que l'outil voit dans chaque exemple obtient un type non-nullable et un paramètre de constructeur `required`; un champ qui est parfois absent ou null obtient un type nullable sans le mot clé `required`. Le désactiver rend tous les champs nullable et optionnels, ce qui est plus tolérant pour les API dont les réponses varient.
Ai-je besoin du paquet json_serializable?
Seulement si vous activez l'option "Annotations json_serializable", qui émet @JsonSerializable()/@JsonKey et une directive de partie attendant un fichier .g.dart généré à partir de build_runner. Laissez-la désactivée et l'outil écrit à la place des méthodes fromJson/toJson simples et sans dépendances.
Peut-il déduire correctement le type d'un champ numérique?
Oui. Un champ qui est toujours un nombre entier devient int; si une valeur d'exemple a un point décimal, le champ entier est étendu à double pour qu'aucune valeur ne soit tronquée.
Mon JSON est-il téléchargé quelque part?
Non. La classe est générée entièrement dans votre navigateur: votre exemple JSON ne quitte jamais votre appareil.