github.com/lheiskan/zebrapack@v4.1.1-0.20181107023619-e955d028f9bf+incompatible/slides/state-of-go/stdlib/json_old.go (about)

     1  package main
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"log"
     7  )
     8  
     9  func main() {
    10  	in := []byte(`
    11      {
    12          "full_name": "Gopher",
    13          "age": 7,
    14          "social_security": 1234
    15      }`)
    16  
    17  	var p Person
    18  	if err := json.Unmarshal(in, &p); err != nil {
    19  		log.Fatal(err)
    20  	}
    21  	fmt.Printf("%+v\n", p)
    22  }
    23  
    24  type Person struct {
    25  	Name     string
    26  	AgeYears int
    27  	SSN      int
    28  }
    29  
    30  func (p *Person) UnmarshalJSON(data []byte) error {
    31  	var aux struct {
    32  		Name     string `json:"full_name"`
    33  		AgeYears int    `json:"age"`
    34  		SSN      int    `json:"social_security"`
    35  	}
    36  	if err := json.Unmarshal(data, &aux); err != nil {
    37  		return err
    38  	}
    39  	*p = Person{
    40  		Name:     aux.Name,
    41  		AgeYears: aux.AgeYears,
    42  		SSN:      aux.SSN,
    43  	}
    44  	*p = Person(aux)
    45  	return nil
    46  }