gojay_example_test.go (1188B)
1 package gojay_test 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "strings" 8 9 "go.lair.cx/gojay" 10 ) 11 12 type User struct { 13 ID int 14 Name string 15 Email string 16 } 17 18 func (u *User) UnmarshalJSONObject(dec *gojay.Decoder, k string) error { 19 switch k { 20 case "id": 21 return dec.Int(&u.ID) 22 case "name": 23 return dec.String(&u.Name) 24 case "email": 25 return dec.String(&u.Email) 26 } 27 return nil 28 } 29 30 func (u *User) NKeys() int { 31 return 3 32 } 33 34 func (u *User) MarshalJSONObject(enc *gojay.Encoder) { 35 enc.IntKey("id", u.ID) 36 enc.StringKey("name", u.Name) 37 enc.StringKey("email", u.Email) 38 } 39 40 func (u *User) IsNil() bool { 41 return u == nil 42 } 43 44 func Example_decodeEncode() { 45 reader := strings.NewReader(`{ 46 "id": 1, 47 "name": "John Doe", 48 "email": "john.doe@email.com" 49 }`) 50 dec := gojay.BorrowDecoder(reader) 51 defer dec.Release() 52 53 u := &User{} 54 err := dec.Decode(u) 55 if err != nil { 56 log.Fatal(err) 57 } 58 59 enc := gojay.BorrowEncoder(os.Stdout) 60 err = enc.Encode(u) 61 if err != nil { 62 log.Fatal(err) 63 } 64 65 fmt.Printf("\nUser ID: %d\nName: %s\nEmail: %s\n", 66 u.ID, u.Name, u.Email) 67 68 // Output: 69 // {"id":1,"name":"John Doe","email":"john.doe@email.com"} 70 // User ID: 1 71 // Name: John Doe 72 // Email: john.doe@email.com 73 }