Skip to main content
CheckTown
Convertidores

Cómo convertir JSON a clases modelo Dart

Publicado 5 min de lectura
En este artículo

Por qué los desarrolladores Dart/Flutter necesitan generación de clases JSON

Las aplicaciones Flutter dependen en gran medida del JSON para la comunicación API, pero Dart carece de mapeo JSON-a-objeto integrado como Gson o Jackson en otros lenguajes. Cada respuesta API requiere una clase modelo con métodos factory fromJson y toJson manuales. Para apps que consumen múltiples endpoints, este código repetitivo se multiplica rápidamente — nuestro convertidor genera clases modelo Dart completas desde muestras JSON instantáneamente, ahorrando horas de codificación repetitiva.

Desde que Dart 2.12 introdujo sound null safety, cada campo en tus clases modelo debe ser explícitamente tipado como nullable o no-nullable. El convertidor analiza tus datos JSON para determinar la correcta nullabilidad de cada campo, produciendo modelos que funcionan correctamente con el sistema de null safety de Dart desde el inicio.

El patrón fromJson/toJson

El convertidor genera clases Dart siguiendo el patrón estándar de constructor factory usado en todo el ecosistema Flutter.

  • factory fromJson — genera un constructor factory que toma un Map<String, dynamic> e inicializa todos los campos con casting de tipos apropiado, verificaciones null y análisis de objetos anidados
  • Método toJson — crea un método toJson() que retorna un Map<String, dynamic> para serialización, manejando objetos anidados llamando recursivamente sus métodos toJson()
  • Generación de modelos anidados — cuando el JSON contiene objetos anidados, el convertidor crea clases Dart separadas para cada estructura anidada con sus propios métodos fromJson/toJson, correctamente enlazados desde la clase padre

Pruébalo gratis — sin registro

Convertir JSON a Dart →

Null safety e integración json_serializable

El convertidor genera código Dart null-safe compatible con las prácticas modernas de desarrollo Flutter.

  • Sound null safety — los campos con valores null en la muestra JSON se tipan como nullable (String?), mientras que los valores presentes usan tipos no-nullable (String), con verificaciones null apropiadas en los constructores fromJson
  • Compatibilidad json_serializable — la estructura de clase generada es compatible con el paquete json_serializable, permitiéndote agregar anotaciones @JsonSerializable() y @JsonKey para generación de código con build_runner
  • Manejo de listas — los arrays de objetos generan tipos List<ChildModel> con mapeo apropiado en fromJson usando .map() y .toList(), manejando escenarios de listas tanto nullable como no-nullable

Preguntas frecuentes

¿Debo usar el paquete freezed en su lugar?

El paquete freezed agrega inmutabilidad, tipos union y soporte de pattern matching a las clases Dart, pero requiere configuración de build_runner y agrega complejidad en tiempo de compilación. Nuestro convertidor genera clases Dart simples que funcionan sin dependencias de generación de código. Puedes migrar la salida a freezed después agregando anotaciones — los nombres de campos y tipos permanecen iguales.

¿Cómo maneja el convertidor los modelos JSON anidados?

Cada objeto JSON anidado se convierte en una clase Dart separada con su propio factory fromJson y método toJson. La clase padre referencia la clase hija en su declaración de tipo y llama a ChildModel.fromJson() en su constructor factory. Las estructuras profundamente anidadas son completamente soportadas con jerarquías de tipos apropiadas.

¿Cómo se manejan los campos List en el código generado?

Las listas de primitivos generan listas tipadas simples (List<String>, List<int>). Las listas de objetos generan List<ChildModel> con mapeo fromJson: (json['items'] as List).map((e) => ChildModel.fromJson(e)).toList(). Las listas nullable incluyen verificaciones null, y los arrays vacíos generan valores predeterminados de lista vacía correctamente tipados.

Herramientas relacionadas