为了账号安全,请及时绑定邮箱和手机立即绑定

如何将消息值解封为映射[字符串][int]类型的 json 结构

如何将消息值解封为映射[字符串][int]类型的 json 结构

Go
阿晨1998 2022-10-04 16:20:49
做完后。阅读所有关于一些API的主体,我得到:-[91 34 123 92 34 78 111 79 102 86 105 101 119 115 92 34 58 123 92 34 48 92 34 58 48 125 44 92 34 78 111 79 102 76 105 107 101 115 92 34 58 123 92 34 48 92 34 58 48 125 44 92 34 78 111 79 102 67 111 109 109 101 110 116 115 92 34 58 123 92 34 48 92 34 5848 125 44 92 34 78 111 79 102 83 104 97 114 101 115 92 34 58 123 92 34 48 92 34 58 48 125 125 34 44 34 123 125 34 93 10]现在我必须将其解封为类型为 =type ActUser struct {    NoOfViews    map[string]int `json:"NoOfViews,omitempty"`    NoOfLikes    map[string]int `json:"NoOfLikes,omitempty"`    NoOfComments map[string]int `json:"NoOfComments,omitempty"`    NoOfShares   map[string]int `json:"NoOfShares,omitempty"`}但当我这样做时var try []ActUsererr = json.Unmarshal(bodyBytes, &try)我得到错误:=无法将字符串取消到类型模型的Go值中。行动用户我尝试转换,但似乎没有任何效果。
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您的示例 JSON 数据对应于 。[91 34 123 ...["{


这表明您收到的 JSON 可能无效 - 它是字符串数组,而不是对象数组。看起来你的对象在编组时可能会被引用。


它可以解组为 ,而不是 。这几乎可以肯定是不可取的,并且在对源数据进行编码时是错误的。最好的方法是修复导致 JSON 对象被引用为字符串的错误。[]string[]ActUser


或者,如果您必须从有缺陷的 JSON 中提取数据,则可以:


var strs []string

if err := json.Unmarshal(bodyBytes, &strs); err != nil {

  log.Fatal(err)

}


if len(strs) == 0 {

  log.Fatal("missing ActUser object")

}


var user ActUser

if err := json.Unmarshal([]byte(strs[0]), &user); err != nil {

  log.Fatal(err)

}

另外,我建议使用 来显示原始 JSON 数据以进行调试(比 ASCII 代码列表容易得多)。fmt.Printf("%s\n", bodyBytes)


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号