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.

Se ejecuta
En tu navegador
Coste
Gratis · sin registro
Disponibilidad
Lista para usar
De JSON a struct de GoProcesamiento local

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

  1. Pega un objeto o una matriz JSON, como la respuesta de una API.
  2. Asigna un nombre al tipo de nivel superior y elige entre structs independientes o anidados.
  3. 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