| // +build ignore,OMIT |
| |
| package main |
| |
| import ( |
| "encoding/json" |
| "fmt" |
| "log" |
| ) |
| |
| func main() { |
| in := []byte(` |
| { |
| "full_name": "Gopher", |
| "age": 7, |
| "social_security": 1234 |
| }`) |
| |
| var p Person |
| if err := json.Unmarshal(in, &p); err != nil { |
| log.Fatal(err) |
| } |
| fmt.Printf("%+v\n", p) |
| } |
| |
| type Person struct { |
| Name string |
| AgeYears int |
| SSN int |
| } |
| |
| func (p *Person) UnmarshalJSON(data []byte) error { |
| var aux struct { |
| Name string `json:"full_name"` |
| AgeYears int `json:"age"` |
| SSN int `json:"social_security"` |
| } |
| if err := json.Unmarshal(data, &aux); err != nil { |
| return err |
| } |
| *p = Person{ |
| Name: aux.Name, |
| AgeYears: aux.AgeYears, |
| SSN: aux.SSN, |
| } |
| *p = Person(aux) |
| return nil |
| } |