JSON a Estructura Go
Pega un ejemplo de JSON y obtén definiciones de estructuras Go que lo analicen limpiamente con encoding/json. Los campos son exportados (CamelCase), etiquetados con las claves JSON originales, promovidos a punteros cuando un valor podría ser nulo, y los objetos anidados obtienen sus propias declaraciones de estructura nombradas.
Cómo convertir JSON a estructura Go
-
1
Pega el JSON
Un solo ejemplo es suficiente. Múltiples ejemplos mejoran la inferencia de nulabilidad.
-
2
Elige el nombre
PascalCase para campos exportados es la convención de Go. Elige el estilo de abreviatura (`URL` vs `Url`, `ID` vs `Id`).
-
3
Elige la estrategia opcional
Usa punteros para campos anulables (lo más idiomático), o etiquetas `omitempty`.
-
4
Copia las estructuras
Una estructura raíz más las anidadas. Pega en un archivo `.go` y presiona `go build`.
Ejemplo de salida
Para:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
Salida:
type User struct {
FirstName string `json:"first_name"`
Age int `json:"age"`
Email *string `json:"email"`
Tags []string `json:"tags"`
}
Mapeo de tipos
| Valor JSON | Tipo Go |
|---|---|
| cadena | string |
| entero | int o int64 |
| número (decimal) | float64 |
| booleano | bool |
| null (con hermano no nulo) | *T (puntero) |
| arreglo | []T |
| objeto | Estructura nombrada |
| arreglo mixto | []interface{} |
Idiomas de nombrado que sigue el generador
- Inicialismos en mayúsculas:
id->ID,url->URL,api_key->APIKey. Esto coincide con el estilo recomendado de Go (y las reglas dego vet/staticcheck). - JSON en snake_case -> campos en PascalCase:
first_name->FirstName. - Acrónimos de una sola palabra preservados:
IPse queda comoIP,HTTPse queda comoHTTP. - Etiqueta JSON:
json:"first_name"mantiene la clave original para que la codificación funcione correctamente.
Campos opcionales: ¿puntero o omitempty?
| Estrategia | Usar cuando |
|---|---|
Puntero (*T) |
Necesitas distinguir “ausente” de “valor cero” |
omitempty |
Solo quieres omitir valores cero al serializar; deserializar almacena cero para los faltantes |
| Ninguno | El campo siempre está presente y los valores cero son significativos |
El generador usa por defecto puntero + omitempty para cualquier cosa considerada nula; ajusta según tu semántica.
Errores comunes
- Usar
intdonde el entero JSON excedeMaxInt32en un objetivo de 32 bits. Usaint64para valores grandes conocidos. - Serializar de vuelta y perder el orden de las claves.
encoding/jsonemite claves en el orden de declaración de campo, no en el orden JSON original. Ordena manualmente si necesitas salida canónica. - Arrays de formas mixtas.
[]interface{}pierde la seguridad de tipo. Considera tipos de unión con un campo discriminadortypeen su lugar. - Olvidar
omitemptyen opcionales. Sin él, los campos opcionales se serializan como"foo": nullen lugar de ser omitidos.
Preguntas frecuentes
Usa punteros cuando necesites distinguir “campo ausente” de “campo es cero”. Usa omitempty cuando el valor cero no es un valor de negocio legal ("", 0, false siempre significan “omitir esto”). Muchos equipos eligen uno y lo aplican consistentemente en toda la base de código.
Cada objeto anidado se convierte en una declaración de estructura nombrada separada (por ejemplo, User -> Address). Los tipos se incrustan en línea solo cuando la estructura anidada es pequeña y se usa una vez; de lo contrario, obtienes tipos limpios y reutilizables.
Sí. id se convierte en ID, url se convierte en URL, api_key se convierte en APIKey. Esto es lo que go vet espera y lo que la mayoría de las guías de estilo de Go recomiendan.
El generador emite estructuras simples con etiquetas estándar json:. Para implementaciones personalizadas de UnmarshalJSON (por ejemplo, para fechas en formatos no ISO), agrégalas manualmente después de la generación.
Herramientas relacionadas
Referencia de la tabla ASCII
Tabla ASCII completa del 0 al 127 con decimal, hex, octal, binario y referencia numérica HTML para cada carácter, incluidos los códigos de control como NUL, LF y DEL.
Referencia de caracteres HTML
Lista buscable de entidades HTML, sus códigos nombrados y numéricos, y una copia con un clic para caracteres y símbolos especiales.
Referencia de atajos de teclado
Busca los atajos predeterminados documentados de VS Code, Chrome y Bash con GNU Readline en macOS, Windows y Linux.
Generador de letras aleatorias
Genera letras aleatorias A-Z. Elige la cantidad, usa mayúsculas, minúsculas o mezcla de ambas, y aplica el resultado en juegos, consignas o clase.
Generador de Paletas de Color
Genera paletas monocromáticas, análogas, complementarias, triádicas o tetrádicas desde un color base HEX y exporta variables CSS listas para copiar.
Generador de EditorConfig
Genera un archivo .editorconfig con tu estilo y tamaño de indentación, fin de línea, charset y reglas de espacios para un formato consistente en IDEs y editores.
Herramienta disponible en otros idiomas
- JSON zu Go Struct [DE]
- JSON vers Go Struct [FR]
- JSON till Go-struktur [SV]
- JSON을 Go 구조체로 변환 [KO]
- JSON naar Go-structuur [NL]
- JSON إلى بنية Go [AR]
- JSON ke Struktur Go [ID]
- JSON→Go構造体 [JA]
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON thành cấu trúc [VI]
- JSON na strukturę Go [PL]
- JSON para Estrutura Go [PT]
- JSON'dan Go Yapısına [TR]
- JSON 至Go结构 [ZH]
- JSON to Go Struct [EN]
- JSON in Struttura Go [IT]
- JSON в структуру данных [RU]