JSON a Go
Sin contenido aún
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
- Pega contenido JSON en el editor izquierdo, o arrastra y suelta archivos .json/.txt, o haz clic en 'Ejemplo' para cargar datos incorporados.
- Espera unos 400ms; la herramienta convertirá automáticamente y mostrará el código struct Go generado a la derecha.
- 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.
- 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
goDespué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
goSi 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 JSON | Tipo Go Generado | Descripción |
|---|---|---|
"hello" | string | Mapeo directo de string |
true / false | bool | Valor booleano |
42 | int64 | Número sin punto decimal |
3.14 | float64 | Número con punto decimal |
null | interface{} | Respaldo seguro cuando no se puede inferir tipo específico |
["a","b"] | []string | Array de strings |
[1,2,3] | []int64 | Array de enteros |
[{...},{...}] | []UserItem | Array de objetos, tipo de elemento generado recursivamente |
{"id":1} | User | Objeto 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:
| Escenario | Tipo Recomendado | Razón |
|---|---|---|
| IDs enteros regulares, contadores | int64 | Coincide con valor por defecto de herramienta, compatible con mayoría de números JSON |
| Claves primarias autoincrementales de base de datos conocidas como positivas | uint64 | Evita números negativos, semántica más clara |
| Sistemas de 32 bits o enteros de rango pequeño explícito | int32 | Reduce uso de memoria |
| Precios, coordenadas, cómputo científico | float64 | Coincide con valor por defecto, precisión de punto flotante estándar |
| Cálculos de moneda precisos | decimal.Decimal / int | float64 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.
- Compresión JSON
- CSV a JSON
- JSON a CSV
- JSON Diff
- JSON Escape / Unescape
- JSON Flatten
- Formateo JSON
- Generador de JSON
- Consulta JSONPath
- Fusionar JSON
- Reparar JSON
- Validador JSON Schema
- Ordenar JSON
- JSON Stringify
- JSON a HTML
- JSON a Java
- JSON to Markdown
- JSON a SQL
- JSON a TOML
- JSON a TypeScript
- XML a JSON
- JSON a XML
- YAML a JSON
- JSON a YAML
- JSON a Python
- JSON a Go
- JSON a Rust
- JSON a Swift
- JSON a C#
- JSON a C++
- JSON a PHP