为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
宝慕林4294392 2022-08-01 10:23:01
我有这样的模型model.gotype 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",        }    ],
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

只需在Model.go中添加下面的代码(referenceLink)



import (

    "errors"

    "database/sql/driver"

    "encoding/json"

)


// JSONB Interface for JSONB Field of yourTableName Table

type JSONB []interface{}


// Value Marshal

func (a JSONB) Value() (driver.Value, error) {

    return json.Marshal(a)

}


// Scan Unmarshal

func (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)


查看完整回答
反对 回复 2022-08-01
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

我在 https://stackoverflow.com/a/71636216/13719636 中回答了类似的问题。


在 Gorm 中使用 JSONB 的最简单方法是使用 .pgtype.JSONB


Gorm 使用作为驱动程序,并具有名为 的包,其类型名为 。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 []string


err := u.Data.AssignTo(&data)

if err != nil {

    t.Fatal(err)

}

将值设置为 DB


u := User{}


err := u.Data.Set([]string{"abc","def"})

if err != nil {

    return

}


db.Updates(&u)


查看完整回答
反对 回复 2022-08-01
?
Helenr

TA贡献1780条经验 获得超4个赞

你可以使用 gorm-jsonb package。


查看完整回答
反对 回复 2022-08-01
  • 3 回答
  • 0 关注
  • 281 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号