我正在从数据库中检索数据并使用 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)
}
最佳答案
来自 Json unmarshal to interface{} 的 Golang 规范:
To unmarshal JSON into an interface value, Unmarshal stores one of these in the interface value:
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 是一个数组,所以要么使用 interface{}
的 slice 如 Golang 规范或 map[string]interface{}
的 slice 中所述不是 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)
}
Go playground 上的工作代码
已编辑:如果您知道自己的 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)
}
关于json - 使用接口(interface)解码 json 数据时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51244176/