为了账号安全,请及时绑定邮箱和手机立即绑定

golang中的Json解码/解组

golang中的Json解码/解组

Go
DIEA 2022-01-04 09:53:13
我有以下 json:{"results":[{"columns":["room_id","player_name","player_ip"],  "types":["integer","text","text"],  "values":[[1,"alice","127.0.0.1"]            [1,"bob","127.0.0.1"]],  "time":0.00018839100000000002}]}其中值可以在其中包含任意数量的元素 []。当我尝试将 json 解组到一个结构中时,“values”标签没有被正确解析结构:type queryResults struct {        Results []struct {            Columns []string `json:"columns"`            Types []string `json:"types"`            Values []struct {                Room_id int                Player_name string                Player_ip string            } `json:"values"`            Time float64 `json:"time"`        } `json:"results"`    }代码://jsonString is the string input to Unmarshalresultjson := queryResults{}json.Unmarshal([]byte(jsonString), &resultjson)fmt.Printf("%+v",resultjson)电流输出:{Results: [{Columns:[room_id player_name player_ip]    Types:[integer text text]    Values:[{room_id:0 player_name: player_ip:}            {room_id:0 player_name: player_ip:}]    Time:0.00018839100000000002}]}预期输出:{Results:     [{Columns:[room_id player_name player_ip]        Types:[integer text text]        Values:[{room_id:1 player_name:alice player_ip:127.0.0.1}                {room_id:1 player_name:bob player_ip:127.0.0.1}]        Time:0.00018839100000000002}]}
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

Json 数组应该解组为 Go 切片或数组。看起来您正试图将里面的数组解组values为struct


"values": [[1,"alice","127.0.0.1"], [1,"bob","127.0.0.1"]]


上面的数组数组应该解组为 Go 切片。


尝试,


type queryResults struct {

    Results []struct {

        Columns []string `json:"columns"`

        Types   []string `json:"types"`

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

        Time float64 `json:"time"`

    } `json:"results"`

}

在围棋游乐场


并且不要忽略错误。如果你尝试过,


err := json.Unmarshal([]byte(jsonString), &resultjson)

if(err != nil){

    fmt.Println(err)

}

你可能已经看到了错误。


查看完整回答
反对 回复 2022-01-04
?
翻阅古今

TA贡献1780条经验 获得超5个赞

问题是您的结构定义期望“值”包含一个对象数组,但您的实际 json 包含一个数组数组。如果您检查 json.Unmarshal() 的结果,您会看到它报告了一个关于此的错误。试试golang 游乐场


error json: cannot unmarshal array into Go value of type struct { Room_id int; Player_name string; Player_ip string }

据我所知,您无法将其直接映射到结构中,您需要将其读入数组,然后将其处理为最终类型。下面是一个成功解析json的例子【解析后的转换留给读者练习】


{Results:[{Columns:[room_id player_name player_ip] 

          Types:[integer text text] 

          Values:[[1 alice 127.0.0.1] [1 bob 127.0.0.1]]

          Time:0.00018839100000000002}]}


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信