插入数据库
读取数据库返回给网页
读取数据库中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 结束了,创作不易!!!