Qué hace
El convertidor de JSON a Go lee un ejemplo JSON y escribe definiciones de structs de Go con etiquetas json, listas para encoding/json. Pega una respuesta de la API que llamas y obtén tipos que puedes usar con json.Unmarshal al momento, sin escribir cada campo y etiqueta a mano.
El convertidor revisa cada valor del ejemplo. Los objetos anidados se convierten en sus propios structs, todos los elementos de un array se combinan en un tipo de elemento y los campos que faltan en algunos elementos o a veces son null se detectan como opcionales. La salida se alinea como lo haría gofmt.
Cómo se usa
- Pega JSON en la entrada, sube un archivo
.jsono haz clic en Ejemplo. - Define el nombre del tipo raíz y elige cómo se escriben los objetos anidados, qué campos llevan
omitemptyy si los campos anulables usan punteros. - Copia el código Go o descárgalo como archivo
.goy añade tu líneapackage.
El JSON no válido se indica con la línea y la columna del problema.
Ejemplo
Este JSON:
{ "id": 7, "user_name": "ada", "tags": ["admin"], "profile": { "avatar_url": "https://example.com/a.png" } }
se convierte en estos structs:
type Root struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Tags []string `json:"tags"`
Profile Profile `json:"profile"`
}
type Profile struct {
AvatarURL string `json:"avatar_url"`
}
Consejos
- Un solo ejemplo solo muestra lo que contiene. Si un valor puede ser número o texto, incluye ambos o mete varios ejemplos en un array para que se combinen.
- Las marcas de tiempo llegan como texto. Cambia tú mismo el tipo a
time.Timecuando el formato sea RFC 3339. - Los objetos con exactamente los mismos campos comparten un struct, lo que mantiene la salida corta cuando la misma forma aparece en varios sitios.
- ¿También escribes TypeScript? El generador de JSON a TypeScript usa la misma inferencia para crear interfaces.
Preguntas frecuentes
› ¿Cómo se eligen los nombres de los campos?
Cada clave JSON se convierte en un nombre de Go exportado en PascalCase, con las siglas habituales en mayúsculas como espera golint, así que user_id pasa a UserID y avatar_url a AvatarURL. La clave original se conserva en la etiqueta json, de modo que encoding/json asigna los campos exactamente.
› ¿Qué tipos de Go se usan?
Las cadenas se convierten en string, los enteros en int (o int64 si algún valor no cabe en 32 bits), los decimales en float64 y los booleanos en bool. Los arrays pasan a ser slices, los objetos vacíos map[string]any y los valores que solo son null o mezclan varios tipos any.
› ¿Qué diferencia hay entre structs con nombre y en línea?
El modo con nombre escribe cada objeto anidado como su propio tipo, como Address u Order, lo que facilita reutilizarlo y probarlo. El modo en línea coloca tipos struct anónimos directamente dentro del padre y deja todo en una sola declaración, como hacen muchos conversores rápidos.
› ¿Cuándo se añade omitempty?
Por defecto solo en los campos opcionales, es decir, los que faltan en algunos objetos de un array o a veces son null. También puedes añadirlo a todos los campos o a ninguno. Activa los punteros para distinguir un valor ausente o null de un valor cero.
› ¿Se sube mi JSON?
No. Los structs se generan en tu navegador y no se envía nada a ningún servidor.