Conversor de JSON a Dart

Paso 1 / 333%

Genera clases de modelo Dart sin dependencias a partir de un objeto JSON o de una matriz de objetos de muestra. El conversor combina todos los elementos analizados, crea clases anidadas, conserva las claves JSON originales e infiere tipos de campo con null safety junto con un constructor factory fromJson. Añade métodos toJson si necesitas una salida compatible con jsonEncode. Tanto la muestra como el código generado permanecen en este navegador: nunca se suben ni se incluyen en la URL.

Cómo funciona

  1. 1

    Pega una muestra representativa

    Usa un objeto JSON o una matriz de objetos. Varias muestras permiten detectar campos ausentes, nullable o con tipos diferentes.

  2. 2

    Elige las opciones de Dart

    Asigna un nombre a la clase raíz, decide si todos los campos deben ser nullable y activa los métodos toJson si los necesitas.

  3. 3

    Revisa y exporta

    Comprueba las clases inferidas y copia el código o descarga un archivo models.dart local.

Cómo se convierte JSON en modelos Dart con null safety

La documentación oficial de dart:convert explica que jsonDecode() produce valores compatibles con JSON, como números, cadenas, booleanos, null, listas y mapas con claves de texto. Una clase de modelo no puede codificarse directamente como JSON, pero jsonEncode() puede llamar a su método toJson(). Este conversor genera ese patrón de serialización manual sin añadir anotaciones json_serializable ni dependencias de paquetes.

Imagina una muestra que contiene un usuario con una dirección anidada. La clase User generada tiene campos final y un constructor con parámetros nombrados. User.fromJson(Map<String, Object?> json) convierte los valores escalares y llama a UserAddress.fromJson() para el objeto anidado. Si address falta o vale null en cualquiera de los objetos analizados, su tipo pasa a ser UserAddress? y la factory comprueba el valor antes de crearlo. Al activar toJson, los modelos anidados se convierten recursivamente en mapas que acepta jsonEncode().

Valor observado en JSON Tipo Dart generado
Número entero int
Número decimal double
Muestras enteras y decimales num
Texto String
Booleano bool
Objeto anidado Una clase de modelo generada
Matriz homogénea List<T>
Matriz anidada vacía o incompatible List<Object?>
Solo null o valores incompatibles Object?

El conversor examina todos los objetos de una matriz raíz, no solo el primero. Un campo se vuelve nullable si falta en algún objeto o aparece expresamente como null. También puedes hacer nullable todos los campos cuando la API real sea menos predecible que la muestra. La guía de null safety de Dart recuerda que los tipos no aceptan null de forma predeterminada y necesitan ? para hacerlo.

Tratamiento de identificadores y límites de la inferencia

Las claves JSON no tienen por qué ser miembros Dart válidos. Se eliminan los signos de puntuación, las palabras se convierten a lowerCamelCase, las palabras reservadas reciben un sufijo seguro y las colisiones obtienen sufijos numéricos deterministas. La clave original permanece intacta en json['original-key'] y en el mapa de toJson(). Los nombres de las clases anidadas incluyen su ruta completa para evitar que dos objetos de dirección distintos se fusionen por error.

Una sola muestra no demuestra el contrato de una API. Las cadenas JSON no son automáticamente fechas, UUID ni enums, y una matriz vacía no aporta ningún tipo de elemento. Los nombres de miembro duplicados tampoco permiten una conversión de ida y vuelta fiable: los analizadores JSON suelen conservar únicamente el último valor. Antes de usar los modelos en producción, compáralos con la documentación o el esquema de la API. La herramienta limita el tamaño de entrada, la profundidad, las declaraciones inferidas y la salida para mantener acotado el trabajo del navegador.

Preguntas frecuentes

No. El análisis, la inferencia, la generación de código, la copia y la descarga se realizan en el navegador. El JSON y el código Dart no se envían al servidor ni se incluyen en la URL.

Sí. Flutter utiliza Dart, por lo que estas clases sin dependencias se pueden incorporar a un proyecto Flutter. Compara primero los tipos inferidos con el contrato real de la API.

No. Genera métodos fromJson manuales y métodos toJson opcionales, sin depender de ningún paquete ni de build_runner.

Un campo pasa a ser nullable si aparece como null o falta en alguna muestra. Puedes hacer nullable todos los campos si la muestra no representa todos los casos.

No. El resultado solo refleja los valores observados. Usa varios objetos de muestra y contrasta el resultado con el esquema o la documentación del proveedor.

Herramientas relacionadas

Herramienta disponible en otros idiomas