Saltar al contenido

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

  1. Pega un objeto o array JSON en el editor izquierdo.
  2. Lee el struct generado; el tipo raíz siempre se llama AutoGenerated.
  3. 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.

Especificaciones y referencias