AimerNeige revised this gist . Go to revision
1 file changed, 53 insertions
gorm-json-example.go(file created)
@@ -0,0 +1,53 @@ | |||
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 | + | } |
Newer
Older