我试图使用MySQL 5.7.8中引入的原生JSON支持
以下是我试用的快速示例应用。
DB Schema
CREATE TABLE IF NOT EXISTS `experiment` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL DEFAULT '',
`age` INT(10) NOT NULL DEFAULT 10,
`content` JSON NOT NULL,
PRIMARY KEY (`id`)
)ENGINE = InnoDB DEFAULT CHARSET=latin1;
GO代码
package main
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"encoding/json"
)
type Experiment struct {
gorm.Model
Name string `json:"name"`
Age int64 `json:"age"`
Content map[string]interface{} `json:"content"`
}
func main() {
db, err := gorm.Open("mysql", "root:root@/testdb?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic("failed to connect database")
}
defer db.Close()
j1 := []byte(`{"name":"anu", "age": 123, "content": { "k1" : "v1", "k2" : [1,2,3]}}`)
var ex Experiment
json.Unmarshal(j1, &ex)
// Create
db.Create(&ex)
}
这里Experiment.Content值是不可预测的。出于这个原因,我必须使用通用地图。
但是,该程序会引发以下错误
(sql: converting Exec argument $6 type: unsupported type map[string]interface {}, a map)
go-gorm库是否支持此功能。什么是实现这个json内容的读写的最佳方法?