栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用golang JSON解码PubNub消息

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用golang JSON解码PubNub消息

简短的答案是,您不能直接将非同类型的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)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417804.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号