JSON a struct de Go

Pegue un objeto JSON y obtenga los structs de Go que le corresponden: un struct por cada objeto, un slice por cada lista y una etiqueta json que conserva cada nombre tal como se escribió.

Gratuita Funciona en su navegador Revisada: jueves, 12 de noviembre de 2026

El texto JSON completo, con llaves al principio. Los nombres conservan su orden y los números conservan sus cifras. No se envía ni se guarda nada.

El nombre del struct exterior. Use letras, dígitos y guiones bajos, y empiece por una letra.

Añade la opción omitempty, para que encoding/json deje fuera de su salida el campo cuando esté vacío.

Resultado

Código Go — Cópielo, o descárguelo como models.go.
Comprobación — En verde cuando el JSON se convierte. En rojo indica el lugar y el motivo.
Código Go

Esta herramienta funciona en su navegador. Lo que escribe no se envía a nosotros.

Cómo se usa

  1. Pegue un objeto JSON en Objeto JSON. Todo el texto debe ser un solo objeto, con llaves al principio.
  2. Escriba un Nombre del struct raíz, como Product, y marque Añadir omitempty a cada etiqueta si quiere esa opción.
  3. Lea Comprobación. Verde significa que el objeto se convirtió; rojo indica el lugar donde está el problema.
  4. Copie el Código Go en un archivo que tenga una cláusula package, o descárguelo como models.go.

Cómo se eligen los tipos de Go

Cada valor JSON recibe el tipo de Go que lo contiene. Una cadena pasa a string, y true o false, a bool. Las reglas de Unmarshal de encoding/json (en inglés) indican cómo se lee de nuevo el JSON en esos tipos.

  • Un número entero que cabe en 64 bits pasa a int64. Un número con punto o exponente, como 1.0 o 2e3, pasa a float64, y también lo hace un entero demasiado grande para int64.
  • Un null pasa a any. Un null junto a un valor de otro tipo toma ese tipo, porque un null deja sin cambios un valor de Go de otro tipo.
  • Un objeto pasa a struct, y una lista toma el tipo que comparten sus elementos. Los objetos de una misma lista se unen en un solo struct, y una lista de tipos mezclados pasa a []any.
  • Un objeto vacío pasa a un struct vacío, y una lista vacía pasa a []any.

Nombres, etiquetas y choques

Cada campo toma su nombre del nombre JSON: las palabras se unen y cada una empieza por mayúscula, así que user-name pasa a UserName. La especificación de Go (en inglés) exporta un campo cuyo nombre empieza por mayúscula, y por eso se pone en mayúscula la primera letra. La etiqueta json conserva el nombre tal como se escribió, de modo que se encuentra la misma clave al leer el JSON de nuevo.

Dos nombres que dan el mismo nombre en Go reciben un número, como AB y AB2, y un struct cuyo nombre ya está usado también recibe un número. Un elemento de lista toma el nombre de su lista: products da un struct llamado Product, y un nombre sin regla de plural recibe el sufijo Item.

  • Un nombre con una coma, un solo guion o sin caracteres no puede ser una etiqueta json, así que la herramienta indica esa clave y se detiene.
  • Con omitempty activado, cada etiqueta recibe la opción. La herramienta pone en mayúscula la primera letra del nombre del struct raíz, así que product pasa a Product.

Lo que la herramienta no hace

  • No añade cláusula package ni importaciones. Pegue el código en un archivo que tenga su propia cláusula package.
  • No usa punteros para los campos opcionales. Un campo que falta o es null en el JSON no se distingue de uno que tiene el valor cero.
  • No cambia los nombres a las siglas habituales de Go, así que id pasa a Id. Renombre el campo a mano si el estilo de su código pide ID.

Ejemplo resuelto: un pedido con un propietario y dos artículos

El JSON de este caso tiene un número entero, un decimal, un objeto y una lista de dos objetos. La tabla muestra el campo de Go en el que se convierte cada nombre JSON. La herramienta escribe los tres structs debajo de la tabla, con el struct exterior, Order, primero.

Nombre JSON Campo de Go Tipo de Go Etiqueta
id Id int64 json:"id"
ratio Ratio float64 json:"ratio"
owner Owner Owner json:"owner"
items Items []Item json:"items"

Preguntas frecuentes

¿Por qué un número entero es int64 y no int?

El tipo int64 es un entero con signo de 64 bits fijos, y contiene todos los enteros de -9223372036854775808 a 9223372036854775807. La herramienta lo usa para cada entero que cabe, así que un valor no se desborda. Cambie el tipo a int a mano si su código lo necesita.

¿Por qué un null pasa a any?

Go no tiene un tipo que contenga por sí solo un null, así que la herramienta usa any, que contiene cualquier valor. Un null junto a un valor de otro tipo toma ese tipo en su lugar, porque encoding/json deja sin cambios un valor de Go de otro tipo al leer un null.

¿Por qué mi campo se llama Id y no ID?

La herramienta pone en mayúscula la primera letra de cada palabra y no aplica las siglas habituales de Go, así que id pasa a Id. La etiqueta json sigue diciendo id, de modo que los datos se leen igual. Renombre el campo si el estilo de su código pide ID.

¿Qué versión de Go necesita el resultado?

El resultado usa any para un null, y any es un alias de interface{} que se añadió en Go 1.18. Si su código es más antiguo, sustituya any por interface{}, que es el mismo tipo.

¿Por qué la herramienta rechaza algunos nombres?

Una etiqueta json contiene el nombre, seguido de opciones que empiezan después de una coma, así que un nombre con coma no se puede escribir en una etiqueta. Una etiqueta con un solo guion oculta el campo, de modo que ese nombre también se rechaza.

¿Se envía a alguna parte el JSON que pego?

No. La conversión se hace en su navegador, y nada de lo que pega se guarda ni se envía a nuestro servidor. No pegue una contraseña ni un token en ninguna página en la que no confíe.

Fuentes

Cifras y texto revisados por última vez el jueves, 12 de noviembre de 2026.

Usamos cookies necesarias para que el sitio funcione. Si usted lo acepta, Google también usa cookies publicitarias para mostrar anuncios personalizados. Si las rechaza, seguirá viendo anuncios, pero no estarán personalizados.