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

回复:


{

“元”:{

“查询时间”: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 不起作用。


动漫人物
浏览 211回答 2
2回答

一只萌萌小番薯

您应该只使用具有实际类型的简单字段声明,而不是[]如下所示的类型: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.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    }]  }]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go