Convertir JSON a estructuras de Go
Genera definiciones de struct de Go a partir de JSON con un port de json-to-go, formateadas con gofmt. Las claves pasan a campos exportados en CamelCase con tags json:"..."; los objetos anidados pasan a structs anónimos en línea y null pasa a any.
Escribir un struct para hacer json.Unmarshal de la respuesta de una API REST de terceros.
Cuándo usarla
- Escribir un struct para hacer json.Unmarshal de la respuesta de una API REST de terceros.
- Crear los tipos de petición y respuesta de un handler HTTP de Go a partir de payloads de ejemplo.
Cómo usarla
- Pega un objeto o array JSON en el editor izquierdo.
- Lee el struct generado; el tipo raíz siempre se llama AutoGenerated.
- Cópialo en tu paquete, cambia el nombre del tipo y extrae los structs en línea a tipos con nombre si los reutilizas.
JSON
{
"id": 42,
"user_name": "ada",
"score": 9.5,
"active": true,
"deleted_at": null,
"tags": ["go", "json"],
"address": { "city": "Tokyo", "zip": "100-0001" }
}Struct de Go
type AutoGenerated struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Score float64 `json:"score"`
Active bool `json:"active"`
DeletedAt any `json:"deleted_at"`
Tags []string `json:"tags"`
Address struct {
City string `json:"city"`
Zip string `json:"zip"`
} `json:"address"`
}Detalles y limitaciones
La generación se ejecuta en el navegador. No hay opciones para el nombre del tipo, structs en línea o con nombre, ni para los tags.
Las siglas se escriben en mayúsculas (id pasa a ID) y snake_case pasa a CamelCase, conservando la clave original en el tag json.
Los números enteros pasan a int (int64 si son grandes) y los decimales a float64. null, los arrays vacíos y los arrays mixtos pasan a any o []any.
Cuando los objetos de un array difieren, las claves que faltan en algunos reciben ,omitempty.
FAQ
¿Puedo convertir un array JSON en la raíz?
Sí. Genera type AutoGenerated []struct{...}, fusionando los campos de todos los objetos del array.
¿Por qué mi campo null tiene tipo any?
Un valor null no aporta información de tipo. Sustituye any por un puntero como *string o *time.Time para seguir admitiendo nil.
¿Genera structs anidados con nombre?
No. Los objetos anidados son structs anónimos en línea. Muévelos a tipos con nombre manualmente si necesitas referenciarlos.