gorm-json-example.go
· 1.0 KiB · Go
原始檔案
package main
import (
"encoding/json"
"fmt"
"gorm.io/datatypes"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type User struct {
gorm.Model
Name string
Data datatypes.JSON
}
type UserData struct {
Age int `json:"age"`
Mail string `json:"mail"`
}
func main() {
// init sqlite database
db, err := gorm.Open(sqlite.Open("./data.db"), &gorm.Config{})
if err != nil {
panic(err)
}
db.AutoMigrate(&User{})
// create
user1 := User{
Name: "Aimer",
Data: datatypes.JSON(`{"age": 18, "mail": "aimer@example.com"}`),
}
user2 := User{
Name: "Neige",
Data: datatypes.JSON(`{"age": 19, "mail": "neige@example.com"}`),
}
db.Create(&user1)
db.Create(&user2)
// search
var user User
db.Where("data->>'age' = ?", 18).First(&user)
fmt.Printf("%v\n", &user)
// convert datatypes.JSON to JSON:
jsonBytes, _ := user.Data.MarshalJSON()
jsonData := string(jsonBytes)
fmt.Println(jsonData)
// unmarshal
var userData UserData
json.Unmarshal(jsonBytes, &userData)
fmt.Printf("Age: %d, Mail: %s\n", userData.Age, userData.Mail)
}
| 1 | package main |
| 2 | |
| 3 | import ( |
| 4 | "encoding/json" |
| 5 | "fmt" |
| 6 | |
| 7 | "gorm.io/datatypes" |
| 8 | "gorm.io/driver/sqlite" |
| 9 | "gorm.io/gorm" |
| 10 | ) |
| 11 | |
| 12 | type User struct { |
| 13 | gorm.Model |
| 14 | Name string |
| 15 | Data datatypes.JSON |
| 16 | } |
| 17 | |
| 18 | type UserData struct { |
| 19 | Age int `json:"age"` |
| 20 | Mail string `json:"mail"` |
| 21 | } |
| 22 | |
| 23 | func main() { |
| 24 | // init sqlite database |
| 25 | db, err := gorm.Open(sqlite.Open("./data.db"), &gorm.Config{}) |
| 26 | if err != nil { |
| 27 | panic(err) |
| 28 | } |
| 29 | db.AutoMigrate(&User{}) |
| 30 | // create |
| 31 | user1 := User{ |
| 32 | Name: "Aimer", |
| 33 | Data: datatypes.JSON(`{"age": 18, "mail": "aimer@example.com"}`), |
| 34 | } |
| 35 | user2 := User{ |
| 36 | Name: "Neige", |
| 37 | Data: datatypes.JSON(`{"age": 19, "mail": "neige@example.com"}`), |
| 38 | } |
| 39 | db.Create(&user1) |
| 40 | db.Create(&user2) |
| 41 | // search |
| 42 | var user User |
| 43 | db.Where("data->>'age' = ?", 18).First(&user) |
| 44 | fmt.Printf("%v\n", &user) |
| 45 | // convert datatypes.JSON to JSON: |
| 46 | jsonBytes, _ := user.Data.MarshalJSON() |
| 47 | jsonData := string(jsonBytes) |
| 48 | fmt.Println(jsonData) |
| 49 | // unmarshal |
| 50 | var userData UserData |
| 51 | json.Unmarshal(jsonBytes, &userData) |
| 52 | fmt.Printf("Age: %d, Mail: %s\n", userData.Age, userData.Mail) |
| 53 | } |