今天在使用Gorm时,操作SQLite中的JSON字段老是出现错误:
json interface conversion: interface {} is string, not []uint8
原因就是Gorm的value与scan函数。一开始我参考的mysql的。在scan函数中,这两者的json还是有差别的,sqlite的json不是[]byte,而是string,所以,正确的写法如下:
// 实现json接口
func (c YourJsonType) Value() (driver.Value, error) {
b, err := json.Marshal(c)
return string(b), err
}
func (c *YourJsonType) Scan(src any) error {
return json.Unmarshal([]byte(src.(string)), c)
}