Saltar al contenido

JSON a estructuras de Go

JSON to Go Structs

Genera estructuras de Go con etiquetas json a partir de un JSON de ejemplo, incluidos los tipos anidados y repetidos.

Genera structs de Go con etiquetas `json:` a partir de un documento de ejemplo, para que el cuerpo de una respuesta se convierta en algo que `encoding/json` pueda deserializar. Los nombres de campo se exportan en camel case y la clave original se conserva en la etiqueta, que es la parte que la gente hace mal a mano.

🔒 Se ejecuta por completo en tu navegadorgojsoncodegenstruct
Generar

JSON de ejemplo

Suelta un archivo .json

Se lee en esta pestaña. No se sube nada.

Dale todos los elementos que tengas. Cada registro de más estrecha la deducción: un campo que falte en uno de ellos es lo que lo vuelve opcional.

TypeScript

Cómo se usa

  1. Pega todos los registros que tengas

    Se lee y fusiona cada elemento de cada arreglo, no solo el primero. Tres registros dicen mucho más que uno, porque un campo ausente en uno de ellos es exactamente lo que hace que ese campo sea opcional.

  2. Da nombre al tipo raíz

    Los objetos anidados toman el nombre de la clave que los contiene, en singular para los arreglos, así que `users` produce un `User`. Solo la raíz necesita un nombre tuyo.

  3. Lee los recuentos bajo la salida

    Tipos, campos opcionales, uniones y cuántos registros se fusionaron. Un recuento de uniones mayor que cero significa que un campo tuvo dos clases de valor distintas en tu muestra, algo que conviene mirar antes de pegar el resultado en una base de código.

  4. Pega los structs en un paquete

    Los campos que faltaban en algunos registros reciben `,omitempty` en su etiqueta para que un viaje de ida y vuelta por marshal no los invente. No se emite cláusula de paquete: tú sabes adónde va.

Preguntas frecuentes

¿Por qué todos los números son `float64`?

Solo cuando la muestra tenía un valor con decimales. Si todos los números del documento eran enteros, el campo se emite como tipo entero. No hay forma de distinguir un `1` de JSON que es un id de un `1` de JSON que es un precio redondeado, así que la muestra es toda la evidencia que hay.

¿Y un campo que es null en algunos registros?

Se convierte en un tipo puntero, que es como Go distingue «ausente o null» de «cero». Eso significa que desreferenciarlo necesita una comprobación de nil: molesto, y la razón por la que la alternativa (un valor plano que se lee en silencio como 0 o "") es peor.

¿Maneja una clave que no es un identificador válido de Go?

El nombre del campo se limpia —se quitan los separadores y se pone cada parte en mayúscula inicial— y la clave original se queda en la etiqueta `json:`, que es lo que realmente hace la correspondencia. Una clave `user-id` se convierte en algo como `UserID` con `json:"user-id"` al lado.

¿Se generan campos `time.Time`?

No. Una marca de tiempo en JSON es una cadena, y convertirla en `time.Time` cambiaría lo que acepta la deserialización. Si quieres eso, cambia el tipo del campo a mano: `encoding/json` analiza RFC 3339 a `time.Time` por sí solo.

Puede recibir de

Después

Estas aceptan lo que produce esta herramienta, así que el resultado puede pasar directamente.