Last active 1702919263

AimerNeige's Avatar AimerNeige revised this gist 1702919263. 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