Conversor de JSON a Struct de Go
Pega un objeto JSON (o un array JSON) para generar automáticamente las definiciones de struct de Go correspondientes con etiquetas json.
Consejos de uso
- Cuando todos los elementos de un array son objetos, sus claves se combinan en un solo struct. Las claves que faltan en algunos elementos reciben automáticamente una etiqueta json `omitempty`.
- El nombre del tipo raíz es "Root" por defecto, pero puedes cambiarlo por el que prefieras. Los nombres de struct para objetos anidados se generan automáticamente convirtiendo el nombre de la propiedad a PascalCase.
- El valor null de JSON se genera como `interface{}` porque Go no tiene un tipo primitivo nativo que admita null. Considera usar un tipo puntero si necesitas un manejo más estricto.
- El resultado es un borrador con columnas ligeramente alineadas. Pasarlo por `gofmt` después de pegarlo lo ajustará al estilo estándar de tu proyecto.
- Pega tal cual una respuesta JSON de ejemplo de tu API para obtener rápidamente un borrador del struct de respuesta que usarás en tu código Go.
Preguntas frecuentes
A propósito — Por qué Go combina structs con etiquetas json
Go es un lenguaje de tipado estático, y al trabajar con JSON, el paquete `encoding/json` de la biblioteca estándar depende de la correspondencia entre los campos del struct y sus etiquetas json para codificar y decodificar datos. Escribir a mano un struct para la forma de la respuesta de una API externa es una tarea repetitiva que crece cada vez que se añade un campo, y se ha repetido en muchos proyectos de Go.
Esta herramienta analiza la estructura de un JSON de ejemplo y genera automáticamente las definiciones de struct y las etiquetas json correspondientes, reduciendo ese trabajo repetitivo. Una herramienta conocida en este mismo espacio es quicktype, que admite convertir a tipos de varios lenguajes; pero para el caso más simple de pegar una respuesta de API de ejemplo y obtener rápidamente un struct de Go, una herramienta enfocada en una sola tarea tiene su propia comodidad.
Como Go no tiene ninguna característica del lenguaje para hacer opcional un campo de struct, el enfoque habitual para los campos JSON que podrían faltar es añadir `omitempty` a la etiqueta json, o usar un tipo puntero (como `*string`) para distinguir un valor cero de "ningún valor". El struct generado es solo una inferencia mecánica a partir de la estructura, así que tratar la posibilidad de null y los futuros cambios de la API como algo que se debe verificar y ajustar a mano contra la especificación real es la práctica habitual.