使用golang JSON解码PubNub消息

vinnylinux

我一直试图从PubNub解析此JSON消息,但没有任何运气:

type PubNubMessage struct {
    body []string
}

[[{"text":"hey"}],"1231212412423235","channelName"]
json: cannot unmarshal array into Go value of type main.PubNubMessage

有没有人知道如何在golang中解码这种复杂类型?

梅里克斯

简短的答案是,您不能直接将非均匀类型的JSON数组(按您的示例)解组到golang结构中。

长答案是,您应该为PubNubMessage类型定义一个(m *PubNubMessage) UnmarshalJSON([]byte) error方法方法将JSON字符串解组为an interface{},然后使用类型断言来确保所需的格式并填充结构。

例如:

type TextMessage struct {
  Text string
}

type PubNubMessage struct {
  Messages []TextMessage
  Id       string
  Channel  string
}

func (pnm *PubNubMessage) UnmarshalJSON(bs []byte) error {
  var arr []interface{}
  err := json.Unmarshal(bs, &arr)
  if err != nil {
    return err
  }
  messages := arr[0].([]interface{}) // TODO: proper type check.
  pnm.Messages = make([]TextMessage, len(messages))
  for i, m := range messages {
    pnm.Messages[i].Text = m.(map[string]interface{})["text"].(string) // TODO: proper type check.
  }
  pnm.Id = arr[1].(string) // TODO: proper type check.
  pnm.Channel = arr[2].(string) // TODO: proper type check.
  return nil
}

  // ...
  jsonStr := `[[{"text":"hey"},{"text":"ok"}],"1231212412423235","channelName"]`
  message := PubNubMessage{}
  err := json.Unmarshal([]byte(jsonStr), &message)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用golang网络套接字解码多种消息类型?

来自分类Dev

如何使用celery worker从SQS轮询消息,消息为JSON格式,worker无法解码该格式

来自分类Dev

Golang JSON解码无法解码接口{}

来自分类Dev

Haskell - 使用模式解码消息

来自分类Dev

在Golang中解码任意JSON

来自分类Dev

如何使用Golang解码Reddit的RSS?

来自分类Dev

如何使用json解码

来自分类Dev

使用Tshark解码LTE RRC消息(hexdump)

来自分类Dev

Golang解码/解组JSON中的无效unicode

来自分类Dev

使用多个String,Pubnub和Android发布消息

来自分类Dev

使用php解析/解码json

来自分类Dev

使用PHP进行JSON解码

来自分类Dev

使用可解码和 JSON

来自分类Dev

使用 swift 的 Codable 解码 JSON

来自分类Dev

无法使用golang解码XML,始终为空结构

来自分类Dev

Golang直接在模板中使用json

来自分类Dev

使用json解码顶级JSON数组

来自分类Dev

如何使用Avro和Flink解码Kafka消息

来自分类Dev

使用Spring将AMQP消息解码为Map

来自分类Dev

json使用jQuery使用Codeigniter解码

来自分类Dev

根据参数值在Golang中解码传入的JSON

来自分类Dev

Golang-如何解码json数组并获取root属性

来自分类Dev

Golang将嵌套的JSON解码为嵌套的结构

来自分类Dev

如何使用golang将xml消息解组到结构中

来自分类Dev

如何使用Gson解码未知字段的JSON?

来自分类Dev

使用PHP用动态行解码json?

来自分类Dev

使用php和curl解码JSON

来自分类Dev

使用名为self的元素解码JSON

来自分类Dev

不要通过使用Json解码()显示值