转到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 elseif 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

回到顶部