猿问

如何使用 GORM 在 POSTGRES 的 JSONB 字段中插入数据

我有这样的模型


model.go

type yourTableName struct {

   Name             string `gorm:"type:varchar(50)" json:"name"`

   Email            string `gorm:"type:varchar(50)" json:"email"`

   FieldNameOfJsonb JSONB  `gorm:"type:jsonb" json:"fieldnameofjsonb"`

}

我想使用 GORM 在 postgres 中插入 FieldNameOfJsonb 作为array of object


如下图所示


{

    "name": " james",

    "email": "james@gmail.com",

    "FieldNameOfJsonb": [

        {

            "someField1": "value",

            "someFiedl2": "somevalue",    

        },

        {

            "Field1": "value1",

            "Fiedl2": "value2",

        }

    ],


宝慕林4294392
浏览 282回答 3
3回答

温温酱

只需在Model.go中添加下面的代码(referenceLink)import (    "errors"    "database/sql/driver"    "encoding/json")// JSONB Interface for JSONB Field of yourTableName Tabletype JSONB []interface{}// Value Marshalfunc (a JSONB) Value() (driver.Value, error) {    return json.Marshal(a)}// Scan Unmarshalfunc (a *JSONB) Scan(value interface{}) error {    b, ok := value.([]byte)    if !ok {        return errors.New("type assertion to []byte failed")    }    return json.Unmarshal(b,&a)}->元帅的参考链接,Unmarshal现在您可以使用以下命令插入数据DB.Create(&yourTableName)

梦里花落0921

我在 https://stackoverflow.com/a/71636216/13719636 中回答了类似的问题。在 Gorm 中使用 JSONB 的最简单方法是使用 .pgtype.JSONBGorm 使用作为驱动程序,并具有名为 的包,其类型名为 。pgxpgxpgtypepgtype.JSONB如果您已经按照Gorm的指示进行安装,则无需安装任何其他软件包。pgx此方法应该是最佳做法,因为它使用基础驱动程序,并且不需要自定义代码。type User struct {    gorm.Model    Data pgtype.JSONB `gorm:"type:jsonb;default:'[]';not null"`}从数据库中获取价值u := User{}db.find(&u)var data []stringerr := u.Data.AssignTo(&data)if err != nil {    t.Fatal(err)}将值设置为 DBu := User{}err := u.Data.Set([]string{"abc","def"})if err != nil {    return}db.Updates(&u)

Helenr

你可以使用 gorm-jsonb package。
随时随地看视频慕课网APP

相关分类

Go
我要回答