首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Go解码JSON

用Go解码JSON
EN

Stack Overflow用户
提问于 2017-11-22 08:33:35
回答 3查看 595关注 0票数 1

我有这样的反应结构

代码语言:javascript
运行
复制
type Reaction struct {
    Id           uint   `json:"id" form:"id"`
    ReactionType uint   `json:"reactionType" form:"reactionType"`
    PostId       uint   `json:"postId" form:"postId"`
    ReactorId    uint   `json:"reactorId" form:"reactorId"`
    CreatedAt    string `json:"createdAt" form:"createdAt"`
    UpdatedAt    string `json:"updatedAt" form:"createdAt"`
}

我有一个函数,它使用一个API,它应该返回Reaction的一个片段。

代码语言:javascript
运行
复制
var myClient = &http.Client{Timeout: 7 * time.Second}

func getJson(url string, result interface{}) error {
  req, _ := http.NewRequest("GET", url, nil)
  resp, err := myClient.Do(req)

  if err != nil {
     return fmt.Errorf("cannot fetch URL %q: %v", url, err)
  }
  defer resp.Body.Close()

  if resp.StatusCode != http.StatusOK {
    return fmt.Errorf("unexpected http GET status: %s", resp.Status)
  }

  err = json.NewDecoder(resp.Body).Decode(result)
  if err != nil {
     return fmt.Errorf("cannot decode JSON: %v", err)
  }
  return nil
}

但不知何故,它未能显示我想要检索的对象的数组/片段,我根本没有任何数据。我错过了哪里?

代码语言:javascript
运行
复制
func main(){
   ..
   ..
   var reactList []Reaction
   getJson("http://localhost:80/reactions", reactList)

   for _, r := range reactList {
        fmt.Print(r.ReactionType)
    }
}

这是最初的回应

代码语言:javascript
运行
复制
[
  {
    "id": 55,
    "reactionType": 5,
    "reactorId": 2,
    "postId": 4,
    "createdAt": "2017-11-18 14:23:29",
    "updatedAt": ""
  },
  {
    "id": 56,
    "reactionType": 5,
    "reactorId": 3,
    "postId": 4,
    "createdAt": "2017-11-18 14:23:42",
    "updatedAt": ""
  },
  {
    "id": 57,
    "reactionType": 4,
    "reactorId": 4,
    "postId": 4,
    "createdAt": "2017-11-18 14:23:56",
    "updatedAt": ""
  }
]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-22 09:08:15

正如注释中所指出的,您需要传递一个指向getJson的指针,以便它能够实际修改片的内容。

代码语言:javascript
运行
复制
getJson("http://localhost:80/reactions", &reactList)

这是您所拥有的PnNK64giE的紧密表示,只需查看在您的情况下哪些地方不合适。

票数 3
EN

Stack Overflow用户

发布于 2017-11-22 08:59:01

查看这个操场:https://play.golang.org/p/VjocUtiDRN

也许这就是你想要的。因此,您应该使您的函数getJson(在Golang命名约定中getJSON是更好的名称)接受[]Reaction参数,而不是interface{}。然后,您可以将类似数组的响应解编组到Reaction的片段中。

票数 0
EN

Stack Overflow用户

发布于 2017-11-22 10:21:52

这里的主要错误是在没有指针的情况下传递结果。应:

代码语言:javascript
运行
复制
getJson("http://localhost:80/reactions", &reactList)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47430024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档