Generador de structs de Go a partir de JSON
Genera definiciones de tipos `struct` de Go con etiquetas `json` a partir de JSON. Infiere los tipos de Go a partir de los valores JSON y crea estructuras idiomáticas de Go aptas para su uso con `encoding/json`.
Genera campos de struct en Go con los tipos correctos y etiquetas de struct JSON.
Convierte cadenas JSON a string, números a int64 o float64 y booleanos a bool.
Crea definiciones de estructuras anidadas para objetos JSON anidados.
Utiliza nombres de campo idiomáticos en PascalCase y etiquetas JSON en camelCase.
La salida está lista para usarse con Marshal y Unmarshal de encoding/json.
Cómo usarlo
Pega un objeto JSON en el campo de entrada.
El generador infiere tipos de Go y produce declaraciones de struct.
Copia las definiciones de struct en tu archivo fuente de Go.
Importa encoding/json y utiliza la estructura con json.Unmarshal.
Desarrollo de APIs con Go
- Deserializar respuestas de la API REST
- Define los tipos de solicitud y respuesta para los controladores HTTP.
- Tipado de archivos de configuración JSON para servicios en Go
Ingeniería de datos
- Analizar cargas útiles de eventos JSON en workers de Go
- Definir estructuras de modelo de datos a partir de registros de muestra
- Tipar las cargas útiles de los webhooks para receptores en Go
Ecosistema de Go
- net/http
- ginebra
- eco
- chi
- gRPC-gateway
- encoding/json
Añade `omitempty` a las etiquetas JSON de los campos que deban omitirse cuando tengan un valor cero: `json:"field,omitempty"`
Para campos anulables en JSON (valores nulos), utiliza tipos de puntero (*string, *int64) para distinguir entre el valor cero y la ausencia del campo.
Si un número JSON puede ser entero o de punto flotante, utiliza float64 para evitar la pérdida de precisión en el paquete encoding/json de Go.
Utiliza tipos de puntero (*string, *int64) para los campos JSON que pueden ser nulos, a fin de distinguir correctamente entre valores nulos y valores cero.
Añade `omitempty` a las etiquetas JSON de los campos opcionales para obtener una salida JSON serializada más limpia.
Para el código de producción, valide la estructura generada frente a la especificación completa de la API y añada los campos adicionales que podrían no aparecer en el JSON de ejemplo.
Preguntas frecuentes
Encuentra respuestas a las preguntas más comunes sobre nuestras herramientas y servicios.
Entender JSON a Go Struct
El sistema de tipos estáticos de Go y el paquete `encoding/json` de su biblioteca estándar hacen que la serialización JSON basada en etiquetas de estructura (*struct tags*) sea el enfoque idiomático para gestionar datos JSON en programas escritos en Go. Cada clave JSON se asigna a un campo de una estructura mediante una etiqueta `json` correspondiente, la cual especifica el nombre de la clave para la serialización, el comportamiento opcional `omitempty` y la conversión opcional a cadena de texto. Escribir manualmente estas definiciones de estructuras para cargas útiles complejas de respuestas de API o para archivos de configuración JSON extensos consume mucho tiempo y es propenso a errores. Es frecuente que los desarrolladores cometan errores tipográficos en los nombres de los campos, elijan tipos de datos incorrectos en Go u olviden añadir las etiquetas de estructura; todo ello provoca fallos silenciosos durante el proceso de deserialización (*unmarshaling*) que resultan difíciles de diagnosticar. La generación automática de estructuras de Go a partir de ejemplos JSON elimina por completo este tipo de errores.
Las reglas de inferencia de tipos para la conversión de JSON a Go siguen una correspondencia directa entre el sistema de tipos de JSON y los tipos primitivos y compuestos de Go. Las cadenas JSON se convierten en campos de tipo `string` en Go. Los valores booleanos JSON pasan a ser de tipo `bool` en Go. El valor `null` de JSON constituye un caso especial: dado que los valores cero de Go para cadenas, enteros y booleanos (cadena vacía, 0, `false`) son valores válidos que entran en conflicto con el concepto de ausencia en JSON, los campos JSON que admiten nulos deben definirse como punteros (`*string`, `*int64`, `*bool`); de este modo, un puntero `nil` en Go representa correctamente el valor `null` de JSON, diferenciándolo del valor cero. Los arrays JSON se convierten en *slices* de Go tipados según el tipo de sus elementos (`[]string`, `[]int64`, `[]NestedStruct`). Los objetos JSON se transforman en tipos *struct* anidados, cada uno con su propia definición de estructura.
El paquete `encoding/json` de Go utiliza etiquetas de estructura (*struct tags*) para controlar el comportamiento de serialización y deserialización. La sintaxis de etiqueta `json:"keyname"` asocia el campo de la estructura con la clave JSON correspondiente. Existen opciones adicionales para controlar el comportamiento: `json:"keyname,omitempty"` omite el campo durante la serialización si este contiene su valor cero, lo que genera una salida JSON más limpia para los campos opcionales; `json:"-"` hace que el campo se ignore por completo; y `json:"keyname,string"` fuerza la conversión de valores numéricos a cadenas JSON y viceversa. El generador crea la etiqueta básica con el nombre de la clave para cada campo; los desarrolladores deben añadir `omitempty` para los campos opcionales y utilizar tipos puntero para los campos que admiten valores nulos, de acuerdo con el contrato real de la API.
Este generador de estructuras Go a partir de JSON produce definiciones idiomáticas de estructuras en Go, con nombres de campos exportados en formato PascalCase, tipos de datos adecuados y etiquetas `json` precisas que conservan los nombres originales de las claves JSON. Los objetos JSON anidados se extraen en tipos de estructura con nombre propio, siguiendo las convenciones de nomenclatura de Go. El código resultante es compilable de inmediato al pegarlo en un archivo fuente de Go con la declaración de paquete correspondiente, y es compatible tanto con el paquete estándar `encoding/json` como con bibliotecas JSON populares de terceros, tales como `jsoniter` y `go-json`. Para tareas como el desarrollo de clientes de API, el modelado de datos en microservicios y el análisis de configuraciones en Go, esta herramienta reduce el tiempo de preparación inicial de nuevas estructuras de datos: pasa de requerir minutos de trabajo manual a solo unos segundos de generación automatizada.