如何将值解组为 json 类型为 map[string][int] 的结构

How to Unmarshal value into json struct of type map[string][int]

resp.body 上完成 ioutil.ReadAll 之后 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 109 101 110 110 116 116 115 92 34 58 123 92 34 48 92 34 48 92 34 58 48 48 125 44 92 92 34 48 92 34 58 48 125 125 34 44 34 123 125 34 93 10]

现在我必须将其解组为类型为 =

的结构 json
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)

我收到错误:=无法将字符串解组为 model.ActUser

类型的 Go 值

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

你的例子JSON数据[91 34 123 ...对应["{.

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

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

或者,如果您必须从 buggy 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)
}

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