[英]Having issues creating a struct for this JSON
我對 golang 非常非常陌生(使用這個項目作為更好地學習語言的一種方式)。 我有一個 api 我想從中提取數據,但我似乎無法為其創建正確類型的結構。
我嘗試編碼的完整 JSON 位於此處。 https://prices.runescape.wiki/api/v1/osrs/latest
JSON的結構是
{
"data": {
"2": {
"high": 182,
"highTime": 1621811749,
"low": 180,
"lowTime": 1621811755
},
"6": {
"high": 186683,
"highTime": 1621811083,
"low": 184528,
"lowTime": 1621811286
},
... REPEATS THOUSANDS OF TIMES ...
}
}
我已經嘗試使用JSON 到 Go轉換器來獲取 JSON 數據,但這會返回一個完全太大的結構。 (Go返回錯誤)我試圖手動制作一個帶有切片的結構,如下所示
type osrsPrices []struct {
ID struct {
High int `json:"high"`
Hightime int `json:"highTime"`
Low int `json:"low"`
Lowtime int `json:"lowTime"`
} `json:"id"`
}
每當我嘗試從終端運行它時,都會出現錯誤“json: cannot unmarshal object into Go value of type main.osrsPrices exit status 1”
這是我正在使用的整個代碼
package main
import (
"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)
}
}
我很確定該錯誤與我嘗試處理數據的方式有關,但我無法直接找出問題,也無法找到解決方案,盡管谷歌搜索了幾個小時。 我感謝任何人在這個問題上的任何幫助。
在最深層次上,你有:
type Price struct {
High int `json:"high"`
Hightime int `json:"highTime"`
Low int `json:"low"`
Lowtime int `json:"lowTime"`
}
這是在帶有可變鍵的 object 中,因此您需要:
type Data struct {
Data map[string]Price `json:"data"`
}
然后你可以解組到這個結構的一個實例中:
var data Data
json.Unmarshal(input,&data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.