logo
GeekFormat

JSON a Go

Pega JSON a la izquierda, y el lado derecho genera automáticamente definiciones de tipo struct listas para usar directamente en proyectos Go. Procesamiento local puro en el navegador, sin registro ni subida requerida.

Relacionado

Acerca de JSON a Go: Convirtiendo JSON a structs fuertemente tipados de Go

JSON a Go es el proceso de convertir automáticamente datos en formato JSON a definiciones de tipo struct del lenguaje Go. JSON es el formato de intercambio de datos más común en APIs REST, archivos de configuración, colas de mensajes y registros, mientras que Go es un lenguaje fuertemente tipado. En desarrollo, a menudo es necesario mapear la estructura dinámica de JSON a structs antes de deserializar con encoding/json. Escribir structs manualmente, especialmente con objetos anidados, es propenso a omitir campos o tipos incorrectos; esta herramienta busca automatizar ese trabajo repetitivo.

El struct de Go es un tipo de datos compuesto, declarado con `type Name struct { ... }`. Cada campo consta de un nombre y tipo; los nombres de campo deben comenzar con letra mayúscula para ser accesibles desde otros paquetes, conocidos como 'identificadores exportados'. La herramienta convierte automáticamente los nombres de campo JSON a nombres de campo exportados PascalCase, ej. `user_name` mapea a `UserName`, preservando la clave original en la etiqueta json.

La conversión central de esta herramienta se realiza mediante el Web Worker jsonFormat en el navegador, llamando al renderizador Go de quicktype-core con opciones `just-types` y `no-comments`. Todo el flujo no depende de servicios backend: el JSON de entrada se analiza localmente, se infieren tipos, se genera código Go, y finalmente se presenta en el editor derecho.

La inferencia de tipos sigue el mapeo convencional JSON-a-Go: strings mapean a `string`, booleanos a `bool`, enteros a `int64`, flotantes a `float64`, arrays a slices `[]T`, objetos a structs independientes, `null` a `interface{}`. Los objetos anidados se procesan recursivamente, manteniendo clara la jerarquía.

Comparado con la escritura manual, el código generado por herramienta es un 'primer borrador ejecutable'. Los desarrolladores típicamente solo necesitan ajustar finamente el nombre de tipo raíz, nombre de paquete, precisión de tipo de campo (ej. int64 a int) y si usar tipos puntero antes de colocarlo en proyectos Go reales. Combinado con copia con un clic y descarga model.go, reduce significativamente el trabajo repetitivo durante fases de integración y modelado.

Casos de uso

  • Desarrollo backend Go convierte JSON de respuesta REST API a structs, vinculando directamente a parámetros de handler Gin/Echo/Fiber con json.Unmarshal
  • Durante integración frontend-backend, toma JSON de respuesta de ejemplo de Postman, genera rápidamente modelos Go para reducir escritura manual de campos
  • Al integrar callbacks Webhook de terceros, convierte JSON payload a structs Go para acceso y validación conveniente a nivel de campo
  • Convierte archivos de configuración JSON de Viper/Consul/Nacos a tipos Go, reemplazando acceso débilmente tipado map[string]interface{}
  • Equipos de microservicios unifican estructuras de solicitud/respuesta de interfaz gRPC/HTTP, convierten JSON de ejemplo a tipos Go compartidos
  • Ingenieros de prueba convierten fixtures JSON a structs Go, usan con testify para pruebas basadas en aserciones
  • Personal de operaciones analiza líneas de registro JSON recolectadas por ELK/Fluentd, genera structs luego usa programas Go para análisis estructurado
  • Después de que rastreadores extraen datos JSON, convierte a structs Go para usar con gorm/gen o ent generando modelos de base de datos
  • Convierte datos de telemetría JSON reportados por dispositivos IoT a structs Go, para deserialización y filtrado en programas de puerta de enlace edge
  • Convierte mensajes JSON consumidos de Kafka/NATS/RabbitMQ a tipos Go para implementación de consumidores basados en eventos
  • Desarrolladores SDK convierten JSON de respuesta de ejemplo del servidor a structs Go, escriben en el paquete types de la biblioteca cliente para referencia de usuarios
  • Convierte JSON de ejemplo de documentación Swagger/OpenAPI a structs Go como ejemplos de código de documentación de interfaz
  • Estudiantes o instructores convierten JSON de ejemplo a structs en cursos de Go, demostrando el sistema de tipos de Go y uso de etiquetas json
  • Scripts de migración de datos convierten filas JSON exportadas de MySQL/PostgreSQL a structs Go para mapeo de campos y validación de tipos
  • Convierte JSON de configuración CI/CD a structs Go para lectura de configuración fuertemente tipada en herramientas de pipeline escritas en Go
  • Refactoriza código heredado que lee JSON dinámicamente vía mapas a acceso fuertemente tipado basado en structs

Cómo Usar

  1. Pega contenido JSON en el editor izquierdo, o arrastra y suelta archivos .json/.txt, o haz clic en 'Ejemplo' para cargar datos incorporados.
  2. Espera unos 400ms; la herramienta convertirá automáticamente y mostrará el código struct Go generado a la derecha.
  3. Si ocurren errores JSON, haz clic en el botón 'Reparar JSON' para corregir automáticamente errores de formato comunes y continuar la generación.
  4. Verifica la salida del lado derecho, haz clic en 'Copiar' para pegar en tu proyecto Go, o haz clic en 'Descargar' para guardar como archivo model.go.

Características

  • Generación local de struct Go en el navegador: el análisis JSON y la generación de código Go se completan en el navegador, los datos brutos no se suben al servidor
  • Conversión automática con debounce de 400ms: no se necesita clic manual después de pegar o editar, el código Go copiable se muestra en tiempo real a la derecha
  • Inferencia de tipos inteligente: string mapea a string, booleano a bool, entero a int64, float a float64, array a slice, objeto a struct
  • Expansión automática de objetos anidados: genera recursivamente tipos struct independientes, manteniendo clara la jerarquía JSON
  • Etiquetas json generadas automáticamente: los campos incluyen etiquetas `json:"nombre_original"`, listas para usar con encoding/json
  • Reparación de errores JSON con un clic: maneja automáticamente comas finales, comillas simples, comillas faltantes y otros errores de formato comunes, continúa la generación después de reparar
  • Soporta entrada por pegado/subida/ejemplo: arrastra y suelta archivos .json/.txt, o carga datos de ejemplo incorporados
  • Copia y descarga con un clic: copia todo el código Go al portapapeles, o descarga como archivo model.go directamente al proyecto
  • Historial de entrada localStorage: guarda automáticamente la entrada reciente, recuperación rápida después de refrescar o cerrar página accidentalmente
  • Editor de pantalla dividida responsivo: ancho de paneles izquierdo/derecho ajustable, visualización cómoda de entrada/salida en escritorio y móvil

Ejemplos de Código

Deserializar JSON con struct generado

go

Después de copiar el struct generado por la herramienta a tu proyecto, puedes deserializar directamente respuestas API con encoding/json.

package main

import (
    "encoding/json"
    "fmt"
)

// 以下代码由 GeekFormat JSON 转 Go 工具生成
type User struct {
    ID      int64    `json:"id"`
    Name    string   `json:"name"`
    Tags    []string `json:"tags"`
    Address Address  `json:"address"`
}

type Address struct {
    City string `json:"city"`
}

func main() {
    data := []byte(`{
        "id": 1,
        "name": "Alice",
        "tags": ["admin", "dev"],
        "address": {"city": "Beijing"}
    }`)

    var u User
    if err := json.Unmarshal(data, &u); err != nil {
        panic(err)
    }

    fmt.Println(u.Name, u.Address.City)
}

Manejar JSON con campos potencialmente faltantes

go

Si ciertos campos API pueden no existir, cambia los campos correspondientes a tipos puntero o usa con etiquetas omitempty.

package main

import "encoding/json"

// 手动将字段改为指针,缺失时值为 nil
type User struct {
    ID      *int64  `json:"id,omitempty"`
    Name    *string `json:"name,omitempty"`
    Email   *string `json:"email,omitempty"`
}

func main() {
    data := []byte(`{"id": 1, "name": "Bob"}`)
    var u User
    json.Unmarshal(data, &u)
    if u.Email == nil {
        println("Email 字段缺失")
    }
}

Preguntas Frecuentes

¿Cómo convierto JSON a struct Go?

Pega el contenido JSON en el cuadro de entrada izquierdo; la herramienta convertirá automáticamente en 400ms y mostrará el struct Go generado a la derecha. También puedes arrastrar y soltar archivos .json/.txt, o hacer clic en 'Ejemplo' para cargar datos incorporados. Después de la conversión, copia o descarga el archivo model.go con un clic.

¿El código Go generado incluye etiquetas json?

Sí. La herramienta genera código Go basado en quicktype-core, y por defecto cada campo struct incluye una etiqueta `json:"nombre_original"`, conveniente para serialización y deserialización directa con Unmarshal/Marshal de encoding/json.

¿Los arrays JSON se convertirán a slices Go?

Sí. Los arrays JSON generan tipos de slice correspondientes según los tipos de elementos, ej. `["a","b"]` genera `[]string`, `[1,2,3]` genera `[]int64`, `[{...},{...}]` genera tipos personalizados como `[]UserItem`.

¿Los objetos anidados generarán múltiples structs?

Sí. Cada objeto anidado genera recursivamente un tipo struct independiente, nombrado en PascalCase. Por ejemplo, el objeto `address` genera un struct `Address`, referenciado en el struct principal mediante el campo `Address Address`.

¿Qué tipo se genera para valores null?

Los valores null en JSON generalmente se infieren como `interface{}`, que es el tipo de respaldo seguro. Si conoces el tipo real del campo, puedes agregar un valor de ejemplo en JSON, regenerar, luego ajustar manualmente al tipo específico.

¿Puedo personalizar el nombre del struct raíz?

Sí. La herramienta usa el nombre de tipo raíz (ej. User) por defecto; después de modificar el nombre de tipo raíz en configuración, todos los nombres de subtipos asociados se actualizan sincrónicamente, y el nombre del archivo descargado también cambia.

¿Qué pasa si JSON tiene errores de formato?

La herramienta detecta automáticamente la validez JSON. Si hay errores comunes como comas finales, comillas simples, comillas faltantes, aparece un botón 'Reparar JSON'. Al hacer clic, intentará reparación automática y regenerará el struct Go; cuando la reparación falla, se indica la ubicación específica del error.

¿Se subirán los datos al servidor? ¿Es privado y seguro?

No. Todo el análisis JSON, inferencia de tipos y generación de código Go se completa en tu navegador vía Web Worker; el contenido de entrada y el código generado nunca se suben a ningún servidor, ni se registran en la nube. JSON sensible que contiene claves API, tokens o datos de negocio puede usarse con seguridad.

¿Puede el código generado colocarse directamente en un proyecto Go?

Sí. El código generado son structs Go estándar con etiquetas json, pueden copiarse directamente al directorio types/ o models/ del proyecto. Recomendamos ajustar finamente los nombres de tipo y paquete para que coincidan con las convenciones de nomenclatura del proyecto.

¿Es gratuita esta herramienta? ¿Necesito registrarme?

Completamente gratuita, no requiere registro ni inicio de sesión. Abre la página y usa inmediatamente, sin restricciones de funciones, marcas de agua ni inicio de sesión forzado.

¿Qué tamaño de archivos JSON se soportan?

La herramienta no tiene límite estricto de tamaño de archivo, pero la velocidad de conversión y el rendimiento de renderizado dependen del rendimiento del navegador y dispositivo. Recomendamos procesar JSON dentro de 1MB para mejor experiencia; para JSON muy grande, procesa primero con un formateador JSON o herramienta de división.

¿Los tipos numéricos generarán float64 uniformemente?

No. La herramienta distingue enteros y flotantes: los campos enteros generan int64, los campos float generan float64. Si prefieres tipos más específicos como int, uint64, reemplaza manualmente después de la generación.

Solución de problemas

El lado derecho muestra 'Por favor ingrese datos JSON'

El cuadro de entrada izquierdo está vacío o contiene solo espacios en blanco. Por favor pega JSON válido, o haz clic en 'Ejemplo' para cargar datos, o arrastra y suelta archivos .json/.txt.

Indica fallo de análisis JSON pero no encuentra ubicación del error

Haz clic en el botón 'Reparar JSON' debajo del cuadro de entrada; la herramienta intentará automáticamente reparar comas finales, comillas simples, comillas faltantes, objetos estilo JS y otros problemas. Después de reparar, los resultados modificados se resaltarán.

Los nombres de campo generados no cumplen con las convenciones de nomenclatura Go

La herramienta genera nombres de campo PascalCase desde claves JSON. Si las claves contienen chino o caracteres especiales, pueden generarse nombres de campo escapados. Recomendamos cambiar claves JSON a minúsculas inglés o snake_case, luego ajustar uniformemente después de la generación.

Campo null generado como interface{}, quiero cambiar a tipo específico

Como null no puede inferir un tipo específico, la herramienta usa interface{} como respaldo. Puedes dar al campo un valor de ejemplo (ej. "" o 0) en el JSON fuente, regenerar, luego cambiar el tipo a un tipo concreto como string/int64.

JSON grande causa retardo de página después de conversión

El renderizado del navegador de JSON muy grande y muchos structs consume memoria significativa. Recomendaciones: ① Mantén solo JSON de ejemplo con campos clave; ② Divide en múltiples objetos y convierte por separado; ③ Cierra otras pestañas que consuman mucha memoria.

Tipo de elemento de array inferido como []interface{}

Cuando los arrays están vacíos [] o los tipos de elementos son inconsistentes, la herramienta usa interface{} como respaldo. Agrega elementos de ejemplo del mismo tipo, o cambia manualmente el tipo a un tipo de slice concreto como []string, []int64 después de la generación.

Glosario

struct
Tipo de datos compuesto de Go, usado para combinar múltiples campos en un tipo. El cuerpo principal del código Go generado por esta herramienta son varias definiciones struct.
slice
Tipo de array dinámico de Go, sintaxis []T. Esta herramienta mapea arrays JSON a slices correspondientes, ej. []string, []int64, []UserItem.
json tag
Cadena de acentos graves después de un campo struct Go, como `json:"user_name"`, usada para especificar el nombre de campo para serialización/deserialización de encoding/json. Esta herramienta genera automáticamente esta etiqueta.
interface{}
Tipo de interfaz vacía de Go, puede representar cualquier valor. Esta herramienta usa interface{} como respaldo seguro al encontrar JSON null o tipos no determinados.
PascalCase
Estilo de nomenclatura con cada palabra capitalizada, ej. UserName, AddressCity. Go requiere que los campos exportados comiencen con letra mayúscula, así que esta herramienta convierte automáticamente nombres de campo JSON a PascalCase.
encoding/json
Paquete de codificación/decodificación JSON en la biblioteca estándar de Go. Los structs generados por esta herramienta, con etiquetas json, pueden usar directamente json.Unmarshal y json.Marshal.
unmarshal
El proceso de analizar flujo de bytes JSON en valores Go. Después de generar structs, el uso más común es llamar json.Unmarshal(data, &user).
omitempty
Opción común para etiquetas json de Go, como `json:"name,omitempty"`, que indica que el campo se omite cuando es valor cero. Esta herramienta no genera omitempty por defecto; agrega manualmente según sea necesario después de la generación.

Tabla de Referencia Rápida de Mapeo de Tipos JSON a Tipos Go

Esta herramienta infiere automáticamente los tipos Go correspondientes basándose en los tipos de valor JSON; los mapeos comunes son los siguientes:

Ejemplo de Valor JSONTipo Go GeneradoDescripción
"hello"stringMapeo directo de string
true / falseboolValor booleano
42int64Número sin punto decimal
3.14float64Número con punto decimal
nullinterface{}Respaldo seguro cuando no se puede inferir tipo específico
["a","b"][]stringArray de strings
[1,2,3][]int64Array de enteros
[{...},{...}][]UserItemArray de objetos, tipo de elemento generado recursivamente
{"id":1}UserObjeto genera struct independiente

Recomendaciones Comunes de Selección de Tipos Numéricos Go

La herramienta usa int64 y float64 por defecto; ajusta según sea necesario en proyectos reales:

EscenarioTipo RecomendadoRazón
IDs enteros regulares, contadoresint64Coincide con valor por defecto de herramienta, compatible con mayoría de números JSON
Claves primarias autoincrementales de base de datos conocidas como positivasuint64Evita números negativos, semántica más clara
Sistemas de 32 bits o enteros de rango pequeño explícitoint32Reduce uso de memoria
Precios, coordenadas, cómputo científicofloat64Coincide con valor por defecto, precisión de punto flotante estándar
Cálculos de moneda precisosdecimal.Decimal / intfloat64 tiene riesgos de precisión; recomienda usar shopspring/decimal o int en centavos

Privacy & Security

Todo el procesamiento de esta herramienta JSON a Go se completa completamente localmente en tu navegador: análisis JSON, inferencia de tipos, generación de código Go todo se ejecuta en el lado del cliente vía Web Worker. El contenido JSON de entrada, archivos subidos y código Go generado nunca se suben a ningún servidor, ni se registran, cachean o almacenan en la nube. Después de cerrar o refrescar la página, todo el contenido de entrada y salida se borra automáticamente de la memoria; solo localStorage retiene tu historial de entrada reciente (borrable en cualquier momento). Adecuado para procesar JSON que contiene claves API, tokens y datos de negocio sensibles.