package main import ( "encoding/json" "fmt" "io" "os" "strings" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func loadPerson2(s string) (Person, error) { var p Person err := json.NewDecoder(strings.NewReader(s)).Decode(&p) if err != nil { return p, err } return p, nil } func loadPerson(r io.Reader) (Person, error) { var p Person err := json.NewDecoder(r).Decode(&p) if err != nil { return p, err } return p, nil } func main() { s := `{"Name":"Joe","Age":18}` s2 := `{"Name":"Jane","Age":21}` p, err := loadPerson(strings.NewReader(s)) if err != nil { fmt.Println(err) } fmt.Println(p) p2, err := loadPerson2(s2) if err != nil { fmt.Println(err) } fmt.Println(p2) f, err := os.Open("data.json") if err != nil { fmt.Println(err) } p3, err := loadPerson(f) if err != nil { fmt.Println(err) } fmt.Println(p3) }