golang中的Json解码/解组

我有以下 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 Unmarshal

resultjson := 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}]}


DIEA
浏览 126回答 2
2回答

暮色呼如

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)}你可能已经看到了错误。

翻阅古今

问题是您的结构定义期望“值”包含一个对象数组,但您的实际 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}]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go