为该JSON创建结构时遇到问题

为该JSON创建结构时遇到问题,json,go,Json,Go,我对golang非常、非常陌生(利用这个项目来更好地学习语言)。我有一个api,我想从中提取数据,但我似乎无法为它创建正确类型的结构 我试图编码的完整JSON位于这里 JSON的结构是 { "data": { "2": { "high": 182, "highTime": 1621811749, "low": 180, "low

我对golang非常、非常陌生(利用这个项目来更好地学习语言)。我有一个api,我想从中提取数据,但我似乎无法为它创建正确类型的结构

我试图编码的完整JSON位于这里

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返回一个错误)我已经尝试手动创建一个带有切片的结构,如下所示

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 to 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"`
}
这是在具有可变关键点的对象中,因此您需要:

type Data struct {
   Data map[string]Price `json:"data"`
}
然后,您可以解组到此结构的实例:

var data Data
json.Unmarshal(input,&data)

非常感谢你!在你的帮助下,我成功地提取了数据。现在我可以实际使用它了:)。你有什么关于我如何迭代数据的建议吗?每当我尝试时,都会出现一个错误,说明“数据[0](类型数据不支持索引)“类型数据”部分是我认为会额外丢失的部分。
data.data[“2”]
将是访问元素的正确方法。阅读围棋教程和其他教程,你似乎缺乏基础知识。我认为我有足够的时间做一些语言测试,但显然我还有更多的学习要做。不过,这最后一条消息暂时对我有帮助。谢谢