Saltar al contenido

JSON a clase Dart

Convierte una muestra JSON en una clase Dart con fromJson, toJson y modelos anidados.

Entrada
Salida

JSON a clase Dart

Pega una muestra JSON y esta herramienta infiere la forma de los datos y genera una clase Dart coincidente, del tipo que de otro modo escribirías a mano para un modelo de Flutter. Los objetos anidados se convierten en sus propias clases, los arreglos se convierten en campos `List<...>` tipados, y cada clase incluye un constructor nombrado, una factoría `fromJson` y un método `toJson`, para que el resultado se inserte directamente en un proyecto Flutter o Dart.

Las opciones controlan el estilo del código generado. "Nombre de la clase" establece la clase raíz; las clases anidadas toman el nombre de su clave JSON. "Seguridad nula con campos requeridos" marca los campos que están presentes en cada muestra como `required` con un tipo no anulable, y los campos que a veces faltan o son nulos como anulables y opcionales; desactívala para que todos los campos sean anulables en su lugar. "Anotaciones json_serializable" sustituye los cuerpos `fromJson`/`toJson` escritos a mano por `@JsonSerializable()` y `@JsonKey`, que delegan en un archivo `.g.dart` generado. "Campos finales" la hace inmutable; "Generar copyWith" copia con cambios sin mutar el original, y "Generar == y hashCode" agrega igualdad de valores. "Indentación" alterna entre sangría de 2 y 4 espacios.

Cuando la misma forma de objeto se repite (un arreglo de elementos que todos tienen los mismos campos, por ejemplo), la herramienta reutiliza una clase en lugar de generar un duplicado para cada ocurrencia, y un campo que solo falta en algunas entradas de un arreglo se infiere correctamente como opcional en lugar de requerido. Las claves JSON que no son identificadores Dart válidos, usan mayúsculas diferentes o chocan con una palabra clave o un nombre de método generado (como `copyWith` o `hashCode`) se renombran automáticamente en el lado de Dart mientras se conserva la clave original para codificar y decodificar.

Todo se ejecuta localmente en tu navegador: ninguna muestra JSON se carga nunca en ningún lado, lo que importa si contiene datos de usuarios reales o la forma de respuesta de una API interna. Copia la clase, descárgala como archivo .txt o envía la salida nuevamente a la entrada para convertir una pieza anidada adicional.

Preguntas frecuentes

¿Cómo se manejan los objetos anidados y los arreglos?
Cada objeto anidado se convierte en su propia clase Dart nombrada según el campo que la introdujo, y un arreglo de objetos se convierte en una Lista tipada<TuClase>. Si la misma forma aparece más de una vez, la herramienta reutiliza una sola clase en lugar de duplicarla para cada ocurrencia.
¿Qué cambia realmente con "Seguridad nula con campos requeridos"?
Cuando está activada, un campo que la herramienta ve en cada muestra obtiene un tipo no anulable y un parámetro de constructor `required`; un campo que a veces falta o es nulo obtiene un tipo anulable sin la palabra clave `required`. Desactivarla hace que cada campo sea anulable y opcional, lo cual es más tolerante con API cuyas respuestas varían.
¿Necesito el paquete json_serializable?
Solo si activas la opción "Anotaciones json_serializable", que emite @JsonSerializable()/@JsonKey y una directiva de parte esperando un archivo .g.dart generado de build_runner. Déjala desactivada y la herramienta escribe métodos fromJson/toJson simples y sin dependencias en su lugar.
¿Puede inferir correctamente el tipo de un campo numérico?
Sí. Un campo que es siempre un número entero se convierte en int; si algún valor de muestra tiene un punto decimal, todo el campo se amplía a double para que ningún valor se trunce.
¿Se carga mi JSON a algún lado?
No. La clase se genera completamente en tu navegador: tu muestra JSON nunca abandona tu dispositivo.