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 }