gorm-json-example.go
· 1.0 KiB · Go
Eredeti
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 | } |