gojay

high performance JSON encoder/decoder with stream API for Golang
git clone git://git.lair.cx/gojay
Log | Files | Refs | README | LICENSE

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 }