Go Websocket:使用 json.RawMessage 反序列化多种 JSON 消息类型
使用 Gorilla websocket 时,处理传入的多种类型的 JSON 消息可以提出挑战。分别对每种类型使用 ReadJSON 方法可能很麻烦。本文探讨了一种利用 json.RawMessage 类型高效处理反序列化的解决方案。
问题:
我们如何根据JSON 中的控制字段,无需使用多个 ReadJSON调用?
解决方案:
定义一个包装结构 Messages,其中包含一个 Control 字段来指示实际数据的类型,以及一个 json.RawMessage 类型的 X 字段来保存序列化数据。
type Messages struct { Control string `json:"control"` X json.RawMessage `json:"X"` }
将传入的 JSON 消息解组到消息中struct.
var m Messages err := c.ReadJSON(&m)
检查 Control 字段以确定数据的实际类型。将 X 字段解组到适当的结构中。
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 }
使用 json.RawMessage 允许使用通用方法来反序列化不同类型的传入消息,从而简化 Websocket 应用程序中多种消息类型的处理。
以上是如何在 Go Websocket 中使用 json.RawMessage 高效反序列化多个 JSON 消息类型?的详细内容。更多信息请关注PHP中文网其他相关文章!