gojay

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

decode_example_test.go (2574B)


      1 package gojay_test
      2 
      3 import (
      4 	"fmt"
      5 	"log"
      6 	"strings"
      7 
      8 	"go.lair.cx/gojay"
      9 )
     10 
     11 func ExampleUnmarshal_string() {
     12 	data := []byte(`"gojay"`)
     13 	var str string
     14 	err := gojay.Unmarshal(data, &str)
     15 	if err != nil {
     16 		log.Fatal(err)
     17 	}
     18 	fmt.Println(str) // true
     19 }
     20 
     21 func ExampleUnmarshal_bool() {
     22 	data := []byte(`true`)
     23 	var b bool
     24 	err := gojay.Unmarshal(data, &b)
     25 	if err != nil {
     26 		log.Fatal(err)
     27 	}
     28 	fmt.Println(b) // true
     29 }
     30 
     31 func ExampleUnmarshal_invalidType() {
     32 	data := []byte(`"gojay"`)
     33 	someStruct := struct{}{}
     34 	err := gojay.Unmarshal(data, &someStruct)
     35 
     36 	fmt.Println(err) // "Cannot unmarshal JSON to type '*struct{}'"
     37 }
     38 
     39 func ExampleDecoder_Decode_string() {
     40 	var str string
     41 	dec := gojay.BorrowDecoder(strings.NewReader(`"gojay"`))
     42 	err := dec.Decode(&str)
     43 	dec.Release()
     44 
     45 	if err != nil {
     46 		log.Fatal(err)
     47 	}
     48 	fmt.Println(str) // "gojay"
     49 }
     50 
     51 func ExampleDecodeObjectFunc() {
     52 	reader := strings.NewReader(`{
     53 		"name": "John Doe",
     54 		"email": "john.doe@email.com" 
     55 	}`)
     56 	dec := gojay.NewDecoder(reader)
     57 
     58 	user := struct {
     59 		name  string
     60 		email string
     61 	}{}
     62 	dec.DecodeObject(gojay.DecodeObjectFunc(func(dec *gojay.Decoder, k string) error {
     63 		switch k {
     64 		case "name":
     65 			return dec.String(&user.name)
     66 		case "email":
     67 			return dec.String(&user.email)
     68 		}
     69 		return nil
     70 	}))
     71 
     72 	fmt.Printf("User\nname: %s\nemail: %s", user.name, user.email)
     73 
     74 	// Output:
     75 	// User
     76 	// name: John Doe
     77 	// email: john.doe@email.com
     78 }
     79 
     80 func ExampleDecodeArrayFunc() {
     81 	reader := strings.NewReader(`[
     82 		"foo",
     83 		"bar"
     84 	]`)
     85 	dec := gojay.NewDecoder(reader)
     86 
     87 	strSlice := make([]string, 0)
     88 	err := dec.DecodeArray(gojay.DecodeArrayFunc(func(dec *gojay.Decoder) error {
     89 		var str string
     90 		if err := dec.AddString(&str); err != nil {
     91 			return err
     92 		}
     93 		strSlice = append(strSlice, str)
     94 		return nil
     95 	}))
     96 
     97 	if err != nil {
     98 		log.Fatal(err)
     99 	}
    100 
    101 	fmt.Print(strSlice)
    102 	// Output:
    103 	// [foo bar]
    104 }
    105 
    106 func ExampleNewDecoder() {
    107 	reader := strings.NewReader(`"gojay"`)
    108 	dec := gojay.NewDecoder(reader)
    109 
    110 	var str string
    111 	err := dec.DecodeString(&str)
    112 	if err != nil {
    113 		log.Fatal(err)
    114 	}
    115 
    116 	fmt.Println(str)
    117 	// Output:
    118 	// gojay
    119 }
    120 
    121 func ExampleBorrowDecoder() {
    122 	reader := strings.NewReader(`"gojay"`)
    123 	dec := gojay.BorrowDecoder(reader)
    124 	defer dec.Release()
    125 
    126 	var str string
    127 	err := dec.DecodeString(&str)
    128 	if err != nil {
    129 		log.Fatal(err)
    130 	}
    131 
    132 	fmt.Println(str)
    133 	// Output:
    134 	// gojay
    135 }
    136 
    137 func ExampleDecoder_DecodeBool() {
    138 	reader := strings.NewReader(`true`)
    139 	dec := gojay.NewDecoder(reader)
    140 
    141 	var b bool
    142 	err := dec.DecodeBool(&b)
    143 	if err != nil {
    144 		log.Fatal(err)
    145 	}
    146 
    147 	fmt.Println(b)
    148 	// Output:
    149 	// true
    150 }