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

去json操作

去json操作

Go
九州编程 2023-02-06 10:28:28
刚刚开始将我的 python 代码转换为 Go,但是在 json 操作上有一些问题......这是我目前的代码package testimport (    "encoding/json"    "fmt"    "io/ioutil"    "net/http"    "strings"    "time")type Collection struct {    Contract string}type Data struct {    Activity Activity `json:"activity"`}type Activity struct {    Activities Activities `json:"activities"`    HasMore    bool       `json:"hasMore"`}type Activities []Saletype Sale struct {    From             string           `json:"from"`    From_login       string           `json:"from_login"`    To               string           `json:"to"`    To_login         string           `json:"to_login"`    Transaction_hash string           `json:"transaction_hash"`    Timestamp        int              `json:"timestamp"`    Types            string           `json:"type"`    Price            float32          `json:"price"`    Quantity         string           `json:"quantity"`    Nft              Nft              `json:"nft"`    Attributes       string           `json:"attributes"`    Collection       CollectionStruct `json:"collection"`}type Nft struct {    Name       string        `json:"name"`    Thumbnail  string        `json:"thumbnail"`    Asset_id   string        `json:"asset_id"`    Collection NftCollection `json:"collection"`}type NftCollection struct {    Avatar    string `json:"avatar"`    Name      string `json:"name"`    Certified bool   `json:"certified"`}type CollectionStruct struct {    Avatar    string `json:"avatar"`    Address   string `json:"address"`    Name      string `json:"name"`    Certified bool   `json:"certified"`}}我不明白为什么我的 Sale 结构是空的:/我创建了所有这些结构以使用 Unmarshal 以便我可以循环。我检查了返回的 json 的结构并复制了它我确定我错过了一些东西但不知道是什么
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

添加到@larsks 的答案中,我可以看到更多错误

  1. ioutil.ReadAll已经返回一个字节数组,您可以直接将其用于解编组。json.Unmarshal(content, &resultJson)

  2. 许多错误会被忽略,因此即使遇到任何错误也不会停止执行。

我建议按如下方式更改功能:

func (c Collection) GetSales(filter, types string) []Sale {

    const url = "https://api.com/"


    req, err := http.NewRequest("POST", url, requestBody)

    if err != nil {

        panic(err)

    }

    

    res, err := http.DefaultClient.Do(req)

    if err != nil {

        panic(err)

    }


    defer res.Body.Close()

    content, err := ioutil.ReadAll(res.Body)

    if err != nil {

        panic(err)

    }


    var resultJson Data

    err = json.Unmarshal(content, &resultJson)

    if err != nil {

        panic(err)

    }


    fmt.Printf("%+v\n", resultJson)

    return resultJson.Activity.Activities.Sales

}


查看完整回答
反对 回复 2023-02-06
?
喵喔喔

TA贡献1735条经验 获得超5个赞

您编写的代码不会编译(由于几个未定义的变量),因此很难将功能问题与语法问题区分开来。


但是,有一点很突出:您正在使用 创建一个 HTTP 请求req, err := http.NewRequest(...),但您从未使用客户端执行该请求。请参阅文档,其中包括此示例:


client := &http.Client{

    CheckRedirect: redirectPolicyFunc,

}


resp, err := client.Get("http://example.com")

// ...


req, err := http.NewRequest("GET", "http://example.com", nil)

// ...

req.Header.Add("If-None-Match", `W/"wyzzy"`)

resp, err := client.Do(req)

// ...

如果您使用NewRequest来创建请求,则必须使用client.Do(req)来执行它。


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

添加回答

举报

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