猿问

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

做完后。阅读所有关于一些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 []ActUser

err = json.Unmarshal(bodyBytes, &try)

我得到错误:=无法将字符串取消到类型模型的Go值中。行动用户


我尝试转换,但似乎没有任何效果。


阿晨1998
浏览 108回答 1
1回答

繁华开满天机

您的示例 JSON 数据对应于 。[91 34 123 ...["{这表明您收到的 JSON 可能无效 - 它是字符串数组,而不是对象数组。看起来你的对象在编组时可能会被引用。它可以解组为 ,而不是 。这几乎可以肯定是不可取的,并且在对源数据进行编码时是错误的。最好的方法是修复导致 JSON 对象被引用为字符串的错误。[]string[]ActUser或者,如果您必须从有缺陷的 JSON 中提取数据,则可以:var strs []stringif err := json.Unmarshal(bodyBytes, &strs); err != nil {  log.Fatal(err)}if len(strs) == 0 {  log.Fatal("missing ActUser object")}var user ActUserif err := json.Unmarshal([]byte(strs[0]), &user); err != nil {  log.Fatal(err)}另外,我建议使用 来显示原始 JSON 数据以进行调试(比 ASCII 代码列表容易得多)。fmt.Printf("%s\n", bodyBytes)
随时随地看视频慕课网APP

相关分类

Go
我要回答