Go 如何解组map[string]接口类型的结构字段

Go 如何解组map[string]接口类型的结构字段,go,go-gin,Go,Go Gin,我正在试图解开多维JSON。我的JSON包含动态密钥,因此我不能这样做 JSON { "id":"3", "datetime":"2019-06-08", "metadata":[{"a":"A"},{"b":"B"}] } 转到文件 type Chats结构{ Id字符串json:“Id” 日期时间字符串json:“日期” 元数据字符串json:“元数据” } chat:=models.Chats{} 错误:=c.BindJSON(&cha

我正在试图解开多维JSON。我的JSON包含动态密钥,因此我不能这样做

JSON

    {
      "id":"3",
      "datetime":"2019-06-08",
      "metadata":[{"a":"A"},{"b":"B"}]
    }
转到文件

type Chats结构{
Id字符串json:“Id”
日期时间字符串json:“日期”
元数据字符串json:“元数据”
}
chat:=models.Chats{}
错误:=c.BindJSON(&chat)
如果出错!=零{
c、 错误(err)
返回
}
fmt.Println(聊天室)

如果元数据是动态的,那么将其视为
接口{}
。如果您知道它总是一个JSON容器,那么为了方便起见,您可以执行
map[string]interface{}
。如果您不一定想使用类型断言来查看其中的内容,而只是想保留json(我猜这是您希望通过将其设置为字符串来实现的),那么还有
json.RawMessage

type Chats struct {
    Id          string      `json:"id"`
    Datetime    string      `json:"date"`
    Metadata    interface{} `json:"metadata"`
}
type Chats struct {
    Id          string                 `json:"id"`
    Datetime    string                 `json:"date"`
    Metadata    map[string]interface{} `json:"metadata"`
}
type Chats struct {
    Id          string          `json:"id"`
    Datetime    string          `json:"date"`
    Metadata    json.RawMessage `json:"metadata"`
}