使用接口解组 JSON 数据时出错?



我正在从数据库中检索数据并使用Jquery字符串化相同的数据。现在我想解组这些数据。数据如下:

values = [{"day":"Sunday","time_slug":1,"timing":"8:00 am - 9:00 am","count":"1"},
{"day":"Sunday","time_slug":2,"timing":"10:00 am - 11:00 am","count":"1"}]

我正在使用的代码:

func SaveProviderSpot(c *gin.Context) {
//values := c.PostForm("array")
byt := []byte(values)
var dat map[string]interface{}
if err := json.Unmarshal(byt, &dat); err != nil {
panic(err)
}
fmt.Println(dat)
}

From Golang spec for Json unmarshal to interface{}:

要将 JSON 取消封送为接口值,解封组存储以下之一 接口值中的这些:

bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays // slice of interface{}
map[string]interface{}, for JSON objects
nil for JSON null

因为您尝试取消封送的 json 是一个数组,所以要么使用 Golang 规范中提到的interface{}切片,要么使用map[string]interface{}map[string]interface{}的切片。这就是返回错误的原因。将变量声明更改为

package main
import (
"fmt"
"encoding/json"
)
func main() {
bytes := []byte(`[{"day":"Sunday","time_slug":1,"timing":"8:00 am - 9:00 am","count":"1"},
{"day":"Sunday","time_slug":2,"timing":"10:00 am - 11:00 am","count":"1"}]`)  
var result []interface{}
if err := json.Unmarshal(bytes, &result); err != nil{
fmt.Println(err)
}
fmt.Println(result)
}

围棋操场上的工作代码

已编辑:如果您知道您的 json 结构,您也可以使用结构。

package main
import (
"fmt"
"encoding/json"
)
type ResultData []struct {
Day      string `json:"day"`
TimeSlug int    `json:"time_slug"`
Timing   string `json:"timing"`
Count    string `json:"count"`
}
func main() {
bytes := []byte(`[{"day":"Sunday","time_slug":1,"timing":"8:00 am - 9:00 am","count":"1"},
{"day":"Sunday","time_slug":2,"timing":"10:00 am - 11:00 am","count":"1"}]`)  
var result ResultData
if err := json.Unmarshal(bytes, &result); err != nil{
fmt.Println(err)
}
fmt.Println(result)
}

游乐场示例

因为您正在尝试将数组解组到映射中。

最简单的解决方法是将解组解组到一组地图中

var dat []map[string]interface{}

最新更新