Pega Go a la izquierda y pulsa "Convertir" — lo pasamos a JSONPega código Go

Qué hace esta herramienta

Tienes un struct de Go con tags json:"..." y un composite literal por ahí (order := Order{...}) y necesitas el JSON que produciría encoding/json. Pega los dos en el editor de la izquierda y pulsa Convertir. La herramienta lee las tags, aplica las reglas de omitempty y -, gestiona los punteros nil y te devuelve un JSON idéntico al que emitiría json.MarshalIndent — así te ahorras el ir y venir con go run.

Sigue la semántica real de marshalling de Go, nada de sustituciones ingenuas. Los nombres de campos exportados se renombran según la primera parte de la tag json. omitempty quita los valores cero (cadena vacía, 0, false, nil, slice/map vacíos). Una tag - elimina el campo. Los campos de structs embebidos (anónimos) se promocionan tal como hace encoding/json. time.Time sale como una cadena RFC 3339 con formato compatible con RFC 8259, y los slices de bytes ([]byte) se codifican en base64.

Los tipos numéricos siguen las reglas de Go: float64 conserva su precisión, int/int64 se quedan como números, y un puntero nil pasa a ser null en JSON. Los slices se vuelven arrays JSON; un slice nil también se vuelve null (no []), tal cual el comportamiento por defecto de Marshal. map[string]V pasa a ser un objeto JSON. Pega varios structs de una — cada instancia acaba como una entrada de primer nivel.

Cómo se usa

Tres pasos. Vale para un struct pequeño o para un fichero <code>types.go</code> entero.

1

Pega tu Go (o prueba el ejemplo)

Mete las definiciones de struct junto con un composite literal (order := Order{...}) en el editor de la izquierda. Un struct único, varios structs con campos embebidos o una declaración a nivel de paquete — todo vale. Pulsa Cargar ejemplo para un punto de partida realista.

Mantén la línea package y los imports — el parser los ignora. Las tags del struct, los receivers de métodos y los comentarios no dan problemas. Como referencia, la documentación de encoding/json.Marshal detalla cada regla que sigue esta herramienta. Vale la pena echarle un ojo al repositorio fuente de Go si te topas con un caso raro.

2

Pulsa Convertir

Haz clic en el botón verde Convertir. La herramienta parsea las definiciones del struct, resuelve el composite literal, aplica las reglas de las tags y produce JSON indentado.

3

Copia el JSON

El panel derecho se rellena con el JSON listo para una petición a una API, una tabla de tests, un fichero de configuración o un fixture que cargas con os.ReadFile.

Cuándo viene bien de verdad

Ejemplos de request/response de handlers HTTP

Tienes un struct de request o response para un handler de <code>net/http</code> o <code>gin</code>. Pégalo con un literal y saca un body JSON que puedes enviar con curl o pegar en Postman.

Fixtures para tests por tabla

Convierte una instancia de struct de un table test en un fichero JSON independiente para golden-file testing o herramientas externas.

CRDs y manifests de Kubernetes

Pasa un struct de Go que represente un custom resource o el payload de un controller al JSON que usan <code>kubectl apply</code> o la API de Kubernetes.

Mensajes de Kafka / NATS / gRPC-gateway

Serializa un struct de mensaje de Go a JSON para probar productores, payloads de muestra o documentación, sin montar el pipeline completo.

Preguntas habituales

¿Respeta la tag json del struct?

Sí. El primer valor de la tag renombra el campo, omitempty quita los valores cero y - excluye el campo por completo. Coincide con las reglas documentadas en la referencia de encoding/json Marshal.

¿Cómo se gestionan time.Time y []byte?

time.Time se formatea como RFC 3339 (p. ej. "2026-03-14T10:30:00Z"), igual que time.Time.MarshalJSON. []byte se codifica en base64 como cadena JSON, que es lo que hace la librería estándar por defecto.

¿Y los punteros nil y los slices nil?

Un puntero nil pasa a ser null en JSON. Un slice nil también pasa a null (no []) — el comportamiento por defecto de Go. Si quieres un array vacío, inicializa el slice con []T{}.

¿Se promocionan los campos de structs embebidos (anónimos)?

Sí. Los campos de un struct embebido se aplanan en el objeto exterior, salvo que el struct embebido tenga su propia tag json — las mismas reglas que aplica encoding/json.

¿Puedo pegar un fichero entero con varios structs?

Sí. Cada tipo de struct que tenga una instancia en lo que pegues acaba como su propia entrada en el JSON. Los tipos de struct anidados se expanden inline allí donde se usan.

¿Se guarda mi código en algún sitio?

El código se envía al backend para convertirlo y no se persiste ni se registra. Como con cualquier herramienta online, échale un vistazo al código sensible antes de pegarlo.

Otras herramientas que te pueden venir bien

Go a JSON es una pieza del rompecabezas. Estas herramientas combinan bien con ella: