亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

去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 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號