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