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

试图从 JSON 响应中获取“Total”的值

试图从 JSON 响应中获取“Total”的值

Go
动漫人物 2022-06-21 10:42:43
回复:{“元”:{“查询时间”:0.039130201,“分页”:{“偏移”:1345,“限制”:5000,“总计”:1345},结构:类型 InLicense 结构 {Total int16 json:"total,omitempty"}类型 OutLicense 结构 {分页 []InLicense json:"pagination,omitempty"}类型 MetaLicense 结构 {Meta []OutLicense json:"meta,omitempty"}函数内部的代码片段:req, err := http.NewRequest("GET", , nil)if err != nil {//处理错误}client := &http.Client{}resp, err := client.Do(req)if err != nil {log.Println("Error: ", err)}defer resp.Body.Close()val := &MetaLicense{ }err = json.NewDecoder(resp.Body).Decode(&val)if err != nil {    log.Fatal(err)}for _, s := range val.Meta {    for _, a := range s.Pagination {        fmt.Println(a.Total)    }}}运行此代码后,出现以下错误: json: cannot unmarshal object into Go struct field MetaLicense.meta of type []OutLicense[]OutLicense 需要哪种类型才能正确解组?我无法以其他方式打印它,但它使用 {} 打印,并且 Strings.Trim 不起作用。
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您应该只使用具有实际类型的简单字段声明,而不是[]如下所示的类型:


type InLicense struct {

    Total int16 json:"total,omitempty"

}


type OutLicense struct {

     Pagination InLicense json:"pagination,omitempty"

}


type MetaLicense struct {

    Meta OutLicense json:"meta,omitempty"

}


查看完整回答
反对 回复 2022-06-21
?
九州编程

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

我稍微简化了解析,只使用了该json.Unmarshal()函数。


raw := "{\n  \"meta\": {\n    \"query_time\": 0.039130201,\n    \"pagination\": {\n      \"offset\": 1345,\n      \"limit\": 5000,\n      \"total\": 1345\n    }\n  }\n}"


parsed := &MetaLicense{}

err := json.Unmarshal([]byte(raw), parsed)

if err != nil {

    log.Fatal(err)

}


fmt.Println(parsed.Meta.Pagination.Total) // Prints: 1345

这是我使用的类型


type InLicense struct {

    Total int16 `json:"total,omitempty"`

}


type OutLicense struct {

    Pagination InLicense `json:"pagination,omitempty"`

}


type MetaLicense struct {

    Meta OutLicense `json:"meta,omitempty"`

}

如所写,您提供的 JSON 有一个额外的,内容,这使您的 json 无法解析(假设您也添加了缺少}的 's.


您的 JSON 中没有列表。列表用[]符号表示。为了让您的类型正常工作,您的 JSON 必须如下所示:


{

  "meta": [{

    "query_time": 0.039130201,

    "pagination": [{

      "offset": 1345,

      "limit": 5000,

      "total": 1345

    }]

  }]

}


查看完整回答
反对 回复 2022-06-21
  • 2 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信