Generación de tipos

JSON a Gomodelos basados en respuestas reales

Compara los dos registros de ejemplo. La salida incluye la declaración del paquete y los imports necesarios.

JSON a Go

Entrada JSON

Análisis y generación en este navegador. Los datos no se envían ni se guardan.

Resultado Go

Opciones de generación

Los números en any necesitan Decoder.UseNumber(). Los punteros no distinguen ausencia de null.

3 declaraciones · 2 tipos puntero

JSON a Go crea un borrador de modelo desde respuestas API. Incluye varios registros en un array para descubrir campos ausentes, valores null y cambios de tipo.

Las muestras no definen campos obligatorios ni reglas de negocio. Revisa la salida con el contrato de la API y prueba la decodificación en tu proyecto.

¿Por qué usar JSON a Go?

Contar con todos los registros

JSON a Go examina todos los elementos en la misma posición del array. Un campo que solo aparece en el segundo registro también se incluye. Un tipo conocido con null o ausencia puede convertirse en puntero.

Dos tarjetas con campos distintos convergen en una estructura completa; las marcas huecas indican valores ausentes.

Elegir el tipo antes de redondear

Los enteros simples dentro de int64 usan int64. Decimales, exponentes y enteros mayores usan json.Number, sin pasar primero por la representación de coma flotante de JavaScript.

Una secuencia larga de bloques numéricos entra completa en una estructura de salida del mismo tamaño.

Revisar las decisiones antes de exportar

01

Aportar variantes representativas

Agrupa registros de la misma forma de respuesta en un array. Los objetos en propiedades distintas mantienen tipos separados, aunque tengan una estructura parecida.

02

Ajustar lo que se puede inferir

Desactiva las fechas si necesitas conservar el texto exacto. Sin nombres anidados se generan structs anónimos. Desactivar tags json elimina la correspondencia con las claves originales.

03

Generar con la configuración actual

El modo automático espera 350 ms tras editar. Desactívalo para mostrar Generar o pulsa Ctrl/Cmd+Enter. Los cambios bloquean copiar y descargar hasta que se genera un resultado actualizado.

Nombres, valores nulos y números

Campos exportados con sus claves

Este generador de structs convierte snake_case y camelCase en nombres ASCII exportados. Conserva siglas como ID y resuelve colisiones con sufijos numéricos estables. Las etiquetas activadas mantienen las claves originales admitidas.

Punteros para opcionales con tipo conocido

Un escalar o Go Struct conocido recibe un puntero si falta o contiene null en alguna muestra. Los slices y maps ya admiten nil. Un campo siempre null usa any; un puntero no distingue ausencia de null explícito.

La escritura del número importa

Solo los enteros simples dentro del rango de 64 bits con signo usan int64. Incluso 1.0 y 1e3 usan json.Number, ya que encoding/json no decodifica esas formas directamente como enteros. Comprueba los errores de conversión antes de calcular.

Tipos anidados y marcas de tiempo

Los valores RFC3339 completos y válidos con hasta nueve cifras de fracción pueden usar time.Time. Todas las cadenas no null de esa posición deben cumplirlo. Los alias en la raíz conservan los métodos del tipo original.

Alcance y compatibilidad

Código para Go 1.18 o posterior
La salida usa any y tags compatibles con encoding/json v1. No genera validadores, UnmarshalJSON personalizado, omitempty ni conversión de Schema. Ejecuta gofmt y pruebas en tu proyecto.
No todas las claves caben en etiquetas
Con etiquetas activas se rechazan claves vacías, comas, comillas, barras inversas, acentos graves, controles y emojis con una ruta de error. Usa un map o decodificador propio. La clave - usa la etiqueta -, para evitar que se ignore.
Los tipos genéricos requieren cuidado
Tipos incompatibles producen any; arrays vacíos, []any; objetos vacíos, map[string]any. Usa Decoder.UseNumber() para sus números, pues el decodificador predeterminado usa float64. Generar tipos no cambia esa opción.
Las fechas no preservan todo el texto
Fechas inválidas, fechas sin hora, zonas ausentes o fracciones de más de nueve cifras permanecen string. time.Time puede normalizar zonas y ceros finales al volver a codificar. Desactiva la inferencia si importa la forma original.
Sintaxis estricta y límites
Se rechazan comentarios, claves duplicadas, comas finales y varios documentos. Sin URL, importación de archivos ni reparación. Límites: 500.000 caracteres de entrada, profundidad 100, 50.000 nodos, 1.000 declaraciones y 1.000.000 caracteres de salida.

Preguntas sobre JSON a Go

¿Cómo se deducen los tipos Go a partir del ejemplo?

Se combinan todas las muestras de la misma posición. Los valores compatibles dan un tipo concreto; las diferencias incompatibles dan any. Los números simples dentro de int64 usan ese tipo y las demás formas usan json.Number.

¿Para qué sirven las etiquetas json?

Conectan los nombres exportados con las claves originales admitidas. Sin ellas, encoding/json busca por el nombre del campo y la correspondencia puede cambiar. Las claves no representables se rechazan cuando las etiquetas están activas.

¿Qué cambia al usar punteros en campos opcionales?

Permiten distinguir nil de un cero concreto en escalares y structs conocidos. No distinguen un campo ausente de un null explícito. Si desactivas los punteros, debes aceptar la semántica de valores cero.

¿Qué ocurre si un campo cambia de tipo entre elementos?

Las variantes incompatibles producen any. JSON a Go examina todos los elementos, por lo que un cambio en el último registro también cuenta. Configura Decoder.UseNumber() si aparecen números en esas posiciones genéricas.

¿Cómo se convierten las claves en nombres exportados?

Los nombres comienzan con mayúscula ASCII y conservan siglas habituales como ID. Las colisiones reciben un sufijo numérico. Revisa los nombres de dominio después de generar el borrador.

¿Hay un caso de inferencia que mejorar?

Probar una respuesta representativa

Usa JSON a Go con varios registros y revisa punteros, tipos numéricos y fechas antes de exportar el archivo para tu proyecto.