gpt4 book ai didi

json - Golang 将 JSON 解码为一个字符串和一个 float64 的 slice

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:12 24 4
gpt4 key购买 nike

我正在对服务器上的数据库运行查询。问题是当我尝试将 JSON 解码为 2D slice 时出现错误,因为其中一个元素是字符串而另一个元素是 float64。

我尝试解决此问题的一种方法是在解码之前修改 JSON 字符串,方法是添加引号以使数字成为字符串。但是有更好的方法吗?有没有一种方法可以修改我的代码结构,以便我能够解码 JSON 代码?

2018/05/04 12:32:19 json:无法将数字解码到 Go 结构字段。字符串类型的值

import (
"fmt"
"encoding/json"
"strings"
"io"
"log"
)

func main(){
str := "{\"results\":[{\"statement_id\":0,\"series\":[{\"name\":\"_\",\"columns\":[\"time\",\"last\"],\"values\":[[\"2018-03-20T18:45:57.07Z\",142774272]]}]}]}"

type Response struct {
Results []struct {
StatementID int `json:"statement_id"`
Series []struct {
Name string `json:"name"`
Columns []string `json:"columns"`
Values [][]string `json:"values"`
} `json:"series"`
} `json:"results"`
}

dec := json.NewDecoder(strings.NewReader(str))
for {
var m Response
if err := dec.Decode(&m); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
fmt.Println(m.Results[0].Series[0].Values[0])
}
}

最佳答案

这是一个不得不使用的非常不幸的 API,但是有一个(有点笨拙的)解决方法:

Values [][]interface{} `json:"values"`

基本上这是在说“未知类型的数组”。这将允许解码器正确解码,但它需要您进行一些类型断言才能实际使用这些值,以便从“未知类型”转换为您可以实际使用的已知类型:

strVal := m.Results[0].Series[0].Values[0][0].(string)
floatVal := m.Results[0].Series[0].Values[0][1].(float64)

可运行示例:https://play.golang.org/p/ikIHnXlSlYx

关于json - Golang 将 JSON 解码为一个字符串和一个 float64 的 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50179281/

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