JSON a struct de Go
Convierte JSON en structs de Go con nombres de campo exportados, etiquetas json, punteros para null y omitempty opcional. Maneja objetos y arrays anidados. Gratis.
Los objetos anidados se convierten en structs separados; los valores anulables usan punteros; los enteros pasan a int64, los decimales a float64 y los valores mixtos o solo null a any.
Se ejecuta completamente en tu navegador. Tus datos nunca se suben.
Herramientas Relacionadas
Ver Todas¿Qué es JSON a struct de Go?
Genera definiciones struct de Go idiomáticas a partir de un ejemplo JSON. Los nombres de campo son PascalCase exportados con las siglas de Go (ID, URL, API…), cada campo lleva una etiqueta json:"…" con la clave original y los objetos anidados se convierten en structs con nombre propio.
Cómo usar JSON a struct de Go
- Pega un ejemplo JSON en Entrada JSON (o haz clic en Cargar ejemplo / Abrir archivo).
- Fija el Nombre del tipo raíz (por defecto
Root). - Deja marcado o desmarca Añadir omitempty a campos opcionales y anulables.
- Copia el código Go generado o haz clic en Descargar para guardarlo como archivo.
Ejemplo
{"id":1,"name":"A","tags":["x"]} type Root struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
} Cuándo usar JSON a struct de Go
Úsalo para deserializar respuestas de API con encoding/json. No genera tipos personalizados para fechas ni enums; cambia tú string por time.Time donde corresponda.
Cómo funciona JSON a struct de Go
El ejemplo se recorre de forma recursiva y cada posición acumula los tipos que ha visto. Los arrays de objetos se fusionan en un solo tipo: una clave que falta en algunos elementos pasa a ser opcional, una clave que es null en algún sitio pasa a ser anulable, los enteros mezclados con decimales se convierten en un tipo de coma flotante y cualquier otra mezcla de tipos recurre a un tipo dinámico. Los objetos anidados se convierten en tipos con nombre propio (PascalCase de la clave, claves de array en singular: orders → Order), con sufijos numéricos si los nombres coinciden. La salida Go usa int64 para enteros, float64 para decimales, string, bool, slices para arrays, un puntero (*T) para valores anulables y any para valores dinámicos o solo null. Las columnas se alinean como en la salida de gofmt.
Casos de Uso Comunes
- Modelar una respuesta REST para json.Unmarshal
- Crear structs de configuración a partir de un archivo JSON
- Acelerar la escritura de DTO para un microservicio en Go
- Comparar los nombres de campo entre JSON y el código Go
Preguntas Frecuentes
¿Por qué int64 en lugar de int?
int64 tiene un tamaño garantizado en todas las plataformas, lo que evita sorpresas de desbordamiento con identificadores grandes. Cámbialo a int si lo prefieres.
¿Cuándo se usa un puntero?
Cuando el ejemplo contiene null para una clave, el campo pasa a ser *T para distinguir un valor ausente del valor cero.
¿Qué hace omitempty?
encoding/json omite el campo al serializar si tiene su valor cero. La opción solo lo añade a los campos opcionales o anulables en el ejemplo.