转到websocket序列化/反序列化json
我正在使用大猩猩
websocket,并且正在计划使用json进行序列化/反序列化。
假设我有这样的结构来接收传入的消息:
type Foo struct { A string `json:"a"`
B string `json:"b"`
}
和
type Bar struct { C string `json:"c"`
D string `json:"d"`
}
大猩猩提供conn.ReadJSON
接收传入的消息。传入的消息可以是Foo或Bar,但是我不能使用conn.ReadJSON(Foo)
和收听其他消息conn.ReadJSON(Bar)
,这很混乱。我想要conn.ReadJSON(Messages)
像JSON.parse()
javascript
这样的东西。如果接收到Foo,则如何处理传入消息,然后将其存储到Foo
结构中;如果接收到Bar,则将其存储到Bar
结构中?
我正在解决方案正在使用此结构:
type Messages struct { Control string `json:"control"`
X // Data type for either Foo or Bar struct
}
现在,传入消息具有json控件,控件的值可以是Foo或Bar。使用if else
if control ==
Foo然后X
将其分配给Foo,否则X
将其分配给Bar。但是我不知道的数据类型X
。
任何解决方案都欢迎,谢谢。
回答:
使用RawMessage。
type Messages struct { Control string `json:"control"`
X json.RawMessage
}
var m Messages
err := c.ReadJSON(&m)
if err != nil {
// handle error
}
switch m.Control {
case "Foo":
var foo Foo
if err := json.Unmarshal([]byte(m.X), &foo); err != nil {
// handle error
}
// do something with foo
case "Bar":
... follow pattern for Foo
}
以上是 转到websocket序列化/反序列化json 的全部内容, 来源链接: utcz.com/qa/429127.html