json - 使用接口(interface)解码 json 数据时出错?

标签 json go interface

我正在从数据库中检索数据并使用 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)
}

Playground Example

关于json - 使用接口(interface)解码 json 数据时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51244176/

相关文章:

sql - 尝试使用Prepare查询包含golang中的搜索

go - 如何在 Go 中实例化未知类型的值?

java - 了解 Java 接口(interface)?

javascript - 在 NodeJS 中解析类似 JSON 的数据

python - 使用 json 序列化程序时从查询集中返回详细名称

go - 通过嵌入类型返回接口(interface)

java - 在 JNI 中使用接口(interface)

performance - Delphi界面性能问题

javascript - NSData dataWithContentsOfUrl 需要 javascript

javascript - 使用 Generate Ionic 使用 AngularJS 将 JSON 字符串反序列化为对象