gpt4 book ai didi

json - 通过 API 调用在 Go 中处理 JSON 数据

转载 作者:IT王子 更新时间:2023-10-29 02:27:18 26 4
gpt4 key购买 nike

我主要使用 Python 编程,并且正在自学一些 Go!

我在尝试从 api 调用中解析 JSON 数据时遇到了绊脚石,我正在向这里的伟大社区寻求一些建议!我在网上找不到任何有用的东西,所以任何建议,即使它只与代码的其余部分相关,也会有所帮助!

package main

import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)

//Time blah
type Time struct {
Updated string `json:"updated"`
UpdatedISO string `json:"updatedISO"`
Updateduk string `json:"updateduk"`
}

//Currency blah blah
type Currency struct {
Code string `json:"code"`
Rate float64 `json:"rate"`
Descr string `json:"description"`
Rf float64 `json:"rate-float"`
}

//Bpi blah
type Bpi struct {
Usd []Currency `json:"USD"`
Eur []Currency `json:"EUR"`
}

//ListResponse is a blah
type ListResponse struct {
Time []Time `json:"time"`
Disclaimer string `json:"disclaimer"`
Bpi []Bpi `json:"bpi"`
}

func btcPrice() {

url := "https://api.coindesk.com/v1/bpi/currentprice/eur.json"
req, err := http.Get(url)
if err != nil {
panic(err.Error())
} else {
data, err := ioutil.ReadAll(req.Body)
if err != nil {
fmt.Println("Error at the data stage: ", err)
}
// fmt.Println(string(data))
var result ListResponse
json.Unmarshal(data, &result)
fmt.Println(result)
}
}
func main() {
btcPrice()
}

基本上,上面的代码是进行 api 调用,获取 JSON 数据并使用我上面的结构对其进行操作。 (我可能完全以错误的方式进行此操作,所以如果是这种情况请给我打电话)。

这就是让我失望的地方。返回的 JSON 如下:

{
"time":{
"updated":"Dec 10, 2017 20:41:00 UTC",
"updatedISO":"2017-12-10T20:41:00+00:00",
"updateduk":"Dec 10, 2017 at 20:41 GMT"
},
"disclaimer":"This data was produced from the CoinDesk Bitcoin Price Index (USD). Non-USD currency data converted using hourly conversion rate from openexchangerates.org",
"bpi":{
"USD":{
"code":"USD",
"rate":"15,453.3888",
"description":"United States Dollar",
"rate_float":15453.3888
},
"EUR":{
"code":"EUR",
"rate":"13,134.4532",
"description":"Euro",
"rate_float":13134.4532
}
}
}

我想做的是单独访问 json 数据集,但问题似乎出在我的结构中。如果我调用基本打印(在上面的 go 代码中注释供您查看),则打印 json 中的整个数据集。但是当我使用 result 代码和 json.unmarshal 它只给我免责声明,即简单标记为字符串类型的结构部分。

我可能看起来有些漫无边际,如果评论中有疑问,我会澄清这些陈述。

总结:

  • 上面的代码获取 JSON 并尝试使用我在上面创建的结构对其进行解码。
  • 数据本身没有问题,我已经使用简单的打印功能对其进行了测试。
  • 问题可能出在结构中(很有可能)。
  • 我希望能够使用此代码执行的操作基本上是访问 JSON 文件的“bpi”数据集的“EUR”数据子集中的“rate_float”金额。 (将欧元金额作为一个小项目用于 slack 机器人)。

最佳答案

你的结构有问题。如果您看到 api 调用返回的 json 没有 timebpi 键的数组值,它们都是对象。 USDEUR key 也是如此。

还有两个错别字/错误:

  1. rate 是字符串而不是 float 。 (读为字符串后必须转换为 float )
  2. rate-float 应该是 rate_float

这是完整的工作(为我工作):

//Currency blah blah
type Currency struct {
Code string `json:"code"`
Rate string `json:"rate"`
Descr string `json:"description"`
Rf float64 `json:"rate_float"`
}

//Bpi blah
type Bpi struct {
Usd Currency `json:"USD"`
Eur Currency `json:"EUR"`
}

//ListResponse is a blah
type ListResponse struct {
Time Time `json:"time"`
Disclaimer string `json:"disclaimer"`
Bpi Bpi `json:"bpi"`
}

与你的交叉核对。希望对您有所帮助!

关于json - 通过 API 调用在 Go 中处理 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47750355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com