Go Gorm中 如何 插入 读取 JSON 数据?一招搞定

插入数据库

读取数据库返回给网页

读取数据库中JSON字段

由于原生的 json.RawMessage 插入 json 数据不太方便,所以我就自己定义了一个类型

首页呢 我们引入 一个比较优秀的JSON解析的类库

go get -u github.com/tidwall/gjson

定义JSON 类型


// JSON 自定义JSON数据类型
type JSON []byte

func (j JSON) Value() (driver.Value, error) {
	if j.IsNull() {
		return nil, nil
	}
	return string(j), nil
}

func (j *JSON) ToJson(value interface{}) error {
	if value == nil {
		*j = nil
		return nil
	}

	if data, err := json.Marshal(value); err == nil {
		value = data
	}

	s, ok := value.([]byte)
	if !ok {
		return errors.New("invalid Scan Source")
	}
	*j = append((*j)[0:0], s...)
	return nil
}

func (m JSON) Pares() gjson.Result {
	return gjson.ParseBytes(m)
}

func (m JSON) MarshalJSON() ([]byte, error) {
	if m == nil {
		return []byte("null"), nil
	}
	return m, nil
}

func (m *JSON) UnmarshalJSON(data []byte) error {
	if m == nil {
		return errors.New("null point exception")
	}
	*m = append((*m)[0:0], data...)
	return nil
}

func (j JSON) IsNull() bool {
	return len(j) == 0 || string(j) == "null"
}

func (j JSON) Equals(j1 JSON) bool {
	return bytes.Equal([]byte(j), []byte(j1))
}

接着 定义数据表结构


type Test struct {
	gorm.Model
	Address   JSON    `json:"address" gorm:"type:json"`
}

插入数据

func main() {
    data := Test{}
	if err := data.Address.ToJson(Address); err != nil {
		return nil, errors.New("转换失败")
	}
    
    db.Create(&data)
    
}

读取JSON数据

如何在代码中读取JSON中的Key

db.Find(&data)
println(data.Address.Pares().Get("username").String())

OK 结束了,创作不易!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值