去json操作

刚刚开始将我的 python 代码转换为 Go,但是在 json 操作上有一些问题......这是我目前的代码


package test


import (

    "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 []Sale


type 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 的结构并复制了它我确定我错过了一些东西但不知道是什么


九州编程
浏览 143回答 2
2回答

梵蒂冈之花

添加到@larsks 的答案中,我可以看到更多错误ioutil.ReadAll已经返回一个字节数组,您可以直接将其用于解编组。json.Unmarshal(content, &resultJson)许多错误会被忽略,因此即使遇到任何错误也不会停止执行。我建议按如下方式更改功能: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}

喵喔喔

您编写的代码不会编译(由于几个未定义的变量),因此很难将功能问题与语法问题区分开来。但是,有一点很突出:您正在使用 创建一个 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)来执行它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go