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.
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.
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.
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)
}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 字段缺失")
}
}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.
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.
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`.
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`.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 |
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 |
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.