我對golang非常非常陌生(使用這個項(xiàng)目作為更好地學(xué)習(xí)語言的一種方式)。我有一個想要從中提取數(shù)據(jù)的api,但我似乎無法為它創(chuàng)建正確類型的結(jié)構(gòu)。我試圖編碼的完整JSON位于此處。https://prices.runescape.wiki/api/v1/osrs/latestJSON 的結(jié)構(gòu)為{ "data": { "2": { "high": 182, "highTime": 1621811749, "low": 180, "lowTime": 1621811755 }, "6": { "high": 186683, "highTime": 1621811083, "low": 184528, "lowTime": 1621811286 }, ... REPEATS THOUSANDS OF TIMES ... }}我嘗試過對 JSON 數(shù)據(jù)使用 JSON 到 Go 轉(zhuǎn)換器,但這會返回一個完全太大的結(jié)構(gòu)。(轉(zhuǎn)到返回錯誤)我嘗試手動制作一個帶有切片的結(jié)構(gòu),如下所示type osrsPrices []struct { ID struct { High int `json:"high"` Hightime int `json:"highTime"` Low int `json:"low"` Lowtime int `json:"lowTime"` } `json:"id"`}每當(dāng)我嘗試從終端運(yùn)行此命令時,我都會看到錯誤“json:無法將對象取消封入main.osrs類型的Go值退出狀態(tài)1”這是我正在使用的整個代碼package mainimport ( "encoding/json" "fmt" "io/ioutil" "log" "net/http" "time")type osrsPrices []struct { ID struct { High int `json:"high"` Hightime int `json:"highTime"` Low int `json:"low"` Lowtime int `json:"lowTime"` } `json:"id"`}func main() { url := "https://prices.runescape.wiki/api/v1/osrs/latest" spaceClient := http.Client{ Timeout: time.Second * 2, // Timeout after 2 seconds } req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { log.Fatal(err) } req.Header.Set("User-Agent", "skillerscape:LearningGoLang|priceChecker") res, getErr := spaceClient.Do(req) if getErr != nil { log.Fatal(getErr) } if res.Body != nil { defer res.Body.Close() } body, readErr := ioutil.ReadAll(res.Body) if readErr != nil { log.Fatal(readErr) } items := osrsPrices{} jsonErr := json.Unmarshal(body, &items) if jsonErr != nil { log.Fatal(jsonErr) } for _, item := range items { fmt.Println(item) }}我很確定該錯誤與我嘗試處理數(shù)據(jù)的方式有關(guān),但是盡管經(jīng)過幾個小時的谷歌搜索,但我無法直接解決問題,也無法解決問題。我感謝任何人在這個問題上的任何幫助。
1 回答

蝴蝶刀刀
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個贊
在最深層次上,您擁有:
type Price struct {
High int `json:"high"`
Hightime int `json:"highTime"`
Low int `json:"low"`
Lowtime int `json:"lowTime"`
}
這是在具有可變鍵的對象中,因此您需要:
type Data struct {
Data map[string]Price `json:"data"`
}
然后,您可以取消編組到此結(jié)構(gòu)的實(shí)例中:
var data Data
json.Unmarshal(input,&data)
- 1 回答
- 0 關(guān)注
- 113 瀏覽
添加回答
舉報(bào)
0/150
提交
取消