无法解组数组到map [string] interface类型的Go结构字段Chats.metadata中

时间:2019-06-06 21:50:21

标签: go gin-gonic

我正在尝试解组多维JSON。我的JSON包含动态密钥,因此无法执行。

JSON

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

转到文件

type Chats struct {
    Id          string json:"id"
    Datetime    string json:"date"
    Metadata  string json:"metadata"
}


chat := models.Chats{}
err := c.BindJSON(&chat)
if err != nil {
    c.Error(err)
    return
}
fmt.Println(chat)

1 个答案:

答案 0 :(得分:1)

如果元数据是动态的,则将其视为interface{}。如果您知道它将始终是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"`
}