Desarrollador / JSON
JSON a struct de Go
Pega un ejemplo JSON y obtén definiciones de structs de Go con nombres de campos exportados, las siglas que esperan los linters de Go y etiquetas json, listas para pegar en tu código.
JSON a struct de Go: El convertidor lee el JSON en tu navegador y genera un struct por cada objeto. Las claves se convierten en nombres CamelCase exportados, con siglas como ID, URL y HTTP en mayúsculas, tal como recomienda golint. Cada campo conserva su clave original en una etiqueta json, con el formato que aplicaría gofmt. Los objetos de una matriz se combinan, por lo que una clave que falta en algunos de ellos recibe omitempty y una clave que a veces es null se convierte en un puntero. Los números enteros se convierten en int64, salvo que aparezca un decimal en la misma posición; en ese caso, se convierten en float64. Funciona al 100 % en tu navegador, sin subir archivos a ningún servidor.
- Categoría
- Herramientas de desarrollo
- Se ejecuta
- En tu navegador
- Coste
- Gratis · sin registro
- Disponibilidad
- Lista para usar
Funciona por completo en tu navegador
Go
type User struct {
ID int64 `json:"id"`
UserName string `json:"user_name"`
AvatarURL string `json:"avatar_url"`
Score float64 `json:"score"`
Tags []string `json:"tags"`
Address Address `json:"address"`
}
type Address struct {
City string `json:"city"`
ZipCode string `json:"zip_code"`
}Las claves que faltan en algunos objetos de un array reciben omitempty; las claves que a veces son null se convierten en punteros. Comprueba los tipos en la documentación de tu API: una muestra solo indica lo que contiene.
De un ejemplo a un tipo
Go decodifica JSON en structs con encoding/json, que relaciona cada clave con un campo mediante su etiqueta json o, cuando no hay etiqueta, por nombre sin distinguir mayúsculas de minúsculas. Solo se rellenan los campos exportados, es decir, los que empiezan por una letra mayúscula; por eso todos los campos de este ejemplo empiezan con mayúscula y conservan la clave original en su etiqueta.
Un ejemplo solo muestra lo que contiene. Una lista de usuarios en la que a uno le falta el correo electrónico indica al conversor que email es opcional; un objeto individual no puede hacerlo. Cuando los tengas, pega varios objetos representativos en un array y comprueba el resultado con la documentación de la API. El formateador de JSON ayuda a detectar primero la estructura de una respuesta larga.
Otros lenguajes y esquemas
El mismo ejemplo puede convertirse en interfaces de TypeScript con el conversor de JSON a TypeScript, para un front end que lea la misma API, o en un JSON Schema para validar los payloads en el límite.
Cómo se usa
- Pega un objeto o una matriz JSON, como la respuesta de una API.
- Asigna un nombre al tipo de nivel superior y elige entre structs independientes o anidados.
- Copia el código de Go.
Privacidad y límites
Tu JSON se convierte en tu navegador y nunca se sube.
Herramientas relacionadas
Preguntas frecuentes
¿Por qué user_id se llama UserID y no UserId?
El estilo de Go escribe las siglas con un uso uniforme de mayúsculas y minúsculas: UserID, APIKey y AvatarURL. El convertidor utiliza la lista de siglas de golint, el linter que popularizó esta regla.
¿Cuándo recibe un campo omitempty o un puntero?
Cuando el ejemplo es una matriz de objetos y falta una clave en algunos de ellos, el campo recibe omitempty, por lo que la serialización lo omite cuando está vacío. Cuando una clave es null en algunos objetos, el campo se convierte en un puntero, de modo que nil puede representar null. También puedes añadir omitempty a todos los campos.
¿Por qué int64 y float64?
JSON tiene un único tipo numérico. Un valor escrito sin punto decimal se convierte en int64 y cualquier valor con una fracción se convierte en float64. Si un ID pudiera superar 2^53 o en realidad fuera una cadena de texto, cambia el tipo manualmente: un ejemplo solo muestra los valores que contiene.
¿Qué ocurre con null o las matrices vacías?
Cuando no hay información suficiente, un campo que siempre es null o una matriz vacía recibe el tipo any (interface{}), que acepta cualquier valor. Sustitúyelo por el tipo real cuando lo conozcas.
Herramienta gratuita · se ejecuta en tu navegador · sin cuenta