print - json tags golang
¿Cómo descomprimir JSON en la interfaz{} en Go? (1)
Defina un tipo de estructura para la parte fija del mensaje con un campo json.RawMessage para capturar la parte json.RawMessage del mensaje. Defina los tipos de estructura para cada uno de los tipos de variantes y decodifíquelos según el comando.
type Message struct {
Cmd string `json:"cmd"`
Data json.RawMessage
}
type CreateMessage struct {
Conf map[string]int `json:"conf"`
Info map[string]int `json:"info"`
}
func main() {
var m Message
if err := json.Unmarshal(data, &m); err != nil {
log.Fatal(err)
}
switch m.Cmd {
case "create":
var cm CreateMessage
if err := json.Unmarshal([]byte(m.Data), &cm); err != nil {
log.Fatal(err)
}
fmt.Println(m.Cmd, cm.Conf, cm.Info)
default:
log.Fatal("bad command")
}
}
Soy un novato en Go y ahora tengo un problema. Tengo un tipo llamado Mensaje, es una estructura como esta:
type Message struct {
Cmd string `json:"cmd"`
Data interface{} `json:"data"`
}
También tengo un tipo llamado CreateMessage como este:
type CreateMessage struct {
Conf map[string]int `json:"conf"`
Info map[string]int `json:"info"`
}
Y tengo una cadena JSON como {"cmd":"create","data":{"conf":{"a":1},"info":{"b":2}}}
.
Cuando uso json.Unmarshal
para decodificar eso en una variable de Mensaje, la respuesta es {Cmd:create Data:map[conf:map[a:1] info:map[b:2]]}
.
Entonces, ¿podría decodificar el JSON en una estructura de mensaje y cambiar la interfaz de sus datos {} para escribir CreateMessage de acuerdo con el Cmd?
Intenté convertir los datos directamente en el tipo CreateMessage pero el complaciente me dijo que Data es un tipo de interfaz de mapa [sting] {}.