gpt4 book ai didi

json - 如何使用 json.NewDecoder 在 Go 中处理 json 响应中的空值

转载 作者:行者123 更新时间:2023-12-01 20:19:07 27 4
gpt4 key购买 nike

这是我的结构:

type Media struct {
MediaID string `json:"media_id"`
MediaType float64 `json:"media_type"`
ViewCount float64 `json:"view_count"`
}
我正在编写一个 API 来提供一些媒体文件,并且我正在使用 json.NewDecoder 来解码和处理响应。我这样填充我的结构:
media := Media{
MediaID: media["media_id"].(string),
MediaType: media["media_type"].(float64),
ViewCount: media["view_count"].(float64),
}
它在许多情况下都可以正常工作,但问题是有时 view_count 为空,它给了我这个错误:
接口(interface)转换:interface {} 为 nil,不是 float64
我真的很感激任何评论!
这是尝试提取响应字段之前的所有代码:
var (
r map[string]interface{}
)

var buf bytes.Buffer

query := map[string]interface{}{
"query": map[string]interface{}{
"match": map[string]interface{}{
"content": params["q"],
},
},
}

if err := json.NewEncoder(&buf).Encode(query); err != nil {
log.Fatalf("Error encoding query: %s", err)
}

res, err = es.Search(
es.Search.WithContext(context.Background()),
es.Search.WithIndex("myindex"),
es.Search.WithBody(&buf),
es.Search.WithTrackTotalHits(true),
es.Search.WithPretty(),
)

if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
log.Fatalf("Error parsing the response body: %s", err)
}

最佳答案

如果某些字段为零,则解决方案是 POINTER!
如果您使用绑定(bind),此代码就足够了

type Media struct {
MediaID string `json:"media_id"`
MediaType float64 `json:"media_type"`
ViewCount *float64 `json:"view_count"`
}
但是如果您想在分配之前逐个字段分配它(这不是一个好主意),您应该检查 media["view_count"] 是否存在
var viewCount float64
tmpViewCount, ok := madia["view_count"]
if ok {
viewCount = tmpViewCount.(float64)
}

media := Media{
MediaID: media["media_id"].(string),
MediaType: media["media_type"].(float64),
ViewCount: viewCount,
}

关于json - 如何使用 json.NewDecoder 在 Go 中处理 json 响应中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62744188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com