Outil Tool Kumar
JSON vers Dart
Générez des modèles Dart pour une réponse d'API dans Flutter. La sortie contient des champs final, des constructeurs const, un constructeur factory fromJson et une méthode toJson pour chaque classe imbriquée.
Utiliser cet outil
- Collez une réponse représentative, en incluant des enregistrements dont les champs diffèrent.
- Vérifiez la sortie générée et modifiez le nom racine si nécessaire.
- Copiez ou téléchargez le code, puis vérifiez les types par rapport à votre contrat d'API.
Exemple détaillé
Cette sortie provient du convertisseur intégré. Les deux prix des articles donnent un champ à virgule flottante ; les valeurs null et chaîne du champ note donnent un champ nullable.
Entrée
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}Sortie
class Root {
final int userId;
final Profile profile;
final List<Item> items;
const Root({
required this.userId,
required this.profile,
required this.items,
});
factory Root.fromJson(Map<String, dynamic> json) => Root(
userId: json['user-id'] as int,
profile: Profile.fromJson(json['profile'] as Map<String, dynamic>),
items: (json['items'] as List<dynamic>).map((e) => Item.fromJson(e as Map<String, dynamic>)).toList(),
);
Map<String, dynamic> toJson() => {
'user-id': userId,
'profile': profile.toJson(),
'items': items.map((e) => e.toJson()).toList(),
};
}
class Profile {
final String city;
final String createdAt;
const Profile({
required this.city,
required this.createdAt,
});
factory Profile.fromJson(Map<String, dynamic> json) => Profile(
city: json['city'] as String,
createdAt: json['created_at'] as String,
);
Map<String, dynamic> toJson() => {
'city': city,
'created_at': createdAt,
};
}
class Item {
final double price;
final String? note;
const Item({
required this.price,
this.note,
});
factory Item.fromJson(Map<String, dynamic> json) => Item(
price: (json['price'] as num).toDouble(),
note: json['note'] as String?,
);
Map<String, dynamic> toJson() => {
'price': price,
'note': note,
};
}
Utiliser le modèle dans Flutter
Importez dart:convert et collez les classes générées dans un fichier de modèle. Passez la map issue du décodage de la réponse à Root.fromJson. jsonEncode appelle la méthode toJson générée.
Si votre projet utilise déjà json_serializable, adaptez les champs à ce fonctionnement pour éviter de maintenir deux ensembles de méthodes JSON générées.
import 'dart:convert';
final model = Root.fromJson(jsonDecode(responseBody) as Map<String, dynamic>);
final text = jsonEncode(model.toJson());Options et cas limites
- Les clés JSON comme user-id deviennent des champs camelCase. Les méthodes JSON générées conservent les clés d'origine.
- Les prix entiers et décimaux sont regroupés sous le type double. Le décodeur passe par une conversion en num, puis appelle toDouble pour accepter les deux valeurs de l'exemple.
- La présence de null et d'une chaîne produit String?. Un champ dont la seule valeur observée est null reste de type dynamic, car son type attendu est inconnu.
- Les dates restent de type String. Vérifiez vous-même leur conversion en DateTime. Dart compilé pour le Web ne peut pas représenter tous les grands entiers exactement.
Privé par défaut
Votre document reste dans ce navigateur. Tool Kumar analyse, convertit et crée les téléchargements sur votre appareil, sans compte ni étape d'envoi au serveur.
JSON vers Dart : questions fréquentes
- Le générateur produit-il des annotations json_serializable ?
- Non. Il écrit directement les méthodes fromJson et toJson. La sortie ne contient ni annotations @JsonSerializable, ni fichiers part, et ne nécessite aucune étape build_runner.
- Comment la null safety est-elle gérée ?
- Les valeurs null et les champs absents de certains enregistrements rendent les champs déduits nullables. Les champs non nullables utilisent des arguments de constructeur required. Les champs dont la seule valeur observée est null utilisent dynamic.
- Peut-il convertir des tableaux d'objets imbriqués ?
- Oui. L'exemple produit List<Item>, applique Item.fromJson à chaque élément d'entrée et appelle toJson sur chaque élément lors de l'encodage.
- Ai-je besoin d'un package Flutter ?
- Les modèles générés utilisent les types de base de Dart. Décodez le texte de la réponse avec dart:convert, puis appelez Root.fromJson.
Outils associés
JSON vers Swift, JSON vers des data classes Kotlin et Générateur JSON Schema.