Herramienta de Tool Kumar
JSON a Dart
Genera modelos Dart para una respuesta de API en Flutter. La salida incluye campos final, constructores const, un constructor factory fromJson y un método toJson para cada clase anidada.
Cómo usar esta herramienta
- Pega una respuesta representativa que incluya registros cuyos campos difieran.
- Revisa la salida generada y cambia el nombre raíz si es necesario.
- Copia o descarga el código y comprueba después los tipos con el contrato de tu API.
Ejemplo práctico
Esta salida procede del conversor integrado. Los dos precios permiten inferir un campo de coma flotante; los valores null y de cadena de note permiten inferir un campo que admite null.
Entrada
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}Salida
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,
};
}
Usar el modelo en Flutter
Importa dart:convert y pega las clases generadas en un archivo de modelo. Pasa el mapa de la respuesta decodificada a Root.fromJson. jsonEncode llama al método toJson generado.
Si tu proyecto ya usa json_serializable, adapta los campos a ese flujo de trabajo en lugar de mantener dos conjuntos de métodos JSON generados.
import 'dart:convert';
final model = Root.fromJson(jsonDecode(responseBody) as Map<String, dynamic>);
final text = jsonEncode(model.toJson());Opciones y casos especiales
- Las claves JSON como user-id se convierten en campos camelCase. Los métodos JSON generados conservan las claves originales.
- Los precios enteros y fraccionarios se unifican en double. El decodificador convierte primero a num y llama a toDouble, por lo que ambos valores del ejemplo funcionan.
- Un valor null y una cadena dan lugar a String?. Un campo que solo aparece como null sigue siendo dynamic porque se desconoce el tipo previsto.
- Las fechas siguen siendo String. Revisa por tu cuenta el análisis con DateTime. Dart compilado para la web no puede representar con exactitud todos los enteros grandes.
Privado por defecto
Tu documento permanece en este navegador. Tool Kumar analiza, convierte y crea las descargas en tu dispositivo, sin cuenta ni pasos para subir archivos.
Preguntas sobre JSON a Dart
- ¿Genera anotaciones json_serializable?
- No. Escribe directamente los métodos fromJson y toJson. No hay anotaciones @JsonSerializable, archivos part ni un paso con build_runner.
- ¿Cómo gestiona null safety?
- Los valores null y los campos ausentes en algunos registros hacen que los campos inferidos admitan null. Los campos que no admiten null usan argumentos de constructor required. Los campos que solo contienen null usan dynamic.
- ¿Puede convertir arrays de objetos anidados?
- Sí. El ejemplo genera List<Item>, transforma cada elemento de entrada con Item.fromJson y llama a toJson en cada elemento al codificar.
- ¿Necesito un paquete de Flutter?
- Los modelos generados usan tipos del núcleo de Dart. Decodifica el texto de la respuesta con dart:convert y llama después a Root.fromJson.
Herramientas relacionadas
JSON a modelos Swift, JSON a data classes de Kotlin y Generador de JSON Schema.