package main import ( "database/sql/driver" "encoding/json" "github.com/jinzhu/gorm" _ "github.com/lib/pq" ) type JSONB map[string]interface{} func (j JSONB) Value() (driver.Value, error) { valueString, err := json.Marshal(j) return string(valueString), err } func (j *JSONB) Scan(value interface{}) error { if err := json.Unmarshal(value.([]byte), &j); err != nil { return err } return nil } type User struct { gorm.Model Info JSONB `sql:"type:jsonb"` } func main() { db, _ := gorm.Open("postgres", "user=myuser password=mypassword dbname=mydbname sslmode=disable") db.CreateTable(&User{}) db.Create(&User{Info: JSONB{"age": 27, "name": "Yan"}}) }