Quick actions

cmd+k|ctrl+k

Navigation

Languages

JSON / Decoding JSON from a file / Essential Go

Snippet info

Language

Go

Visibility

public

Author

kkowalczyk

Created

2019-03-26T09:43:00Z

Updated

2019-03-26T09:43:00Z

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"log"
	"os"
)

type Student struct {
	Name     string
	Standard int `json:"Standard"`
}

func decodeFromReader(r io.Reader) ([]*Student, error) {
	var res []*Student

	dec := json.NewDecoder(r)
	err := dec.Decode(&res)
	if err != nil {
		return nil, err
	}
	return res, nil
}

func decodeFromString(s string) ([]*Student, error) {
	r := bytes.NewBufferString(s)
	return decodeFromReader(r)
}

func decodeFromFile(path string) ([]*Student, error) {
	f, err := os.Open(path)
	if err != nil {
		return nil, err
	}
	defer f.Close()
	return decodeFromReader(f)
}

const jsonStr = `
[
    {
        "Name" : "John Doe",
        "Standard" : 4
    },
    {
        "Name" : "Peter Parker",
        "Standard" : 11
    },
    {
        "Name" : "Bilbo Baggins",
        "Standard" : 150
    }
]
`

func main() {
	// studentList, err := decodeFromFile("data.json")
	studentList, err := decodeFromString(jsonStr)
	if err != nil {
		log.Fatalf("decodeFromString() failed with '%s'\n", err)
	}
	for _, student := range studentList {
		fmt.Printf("Student: %s, standard: %d\n", student.Name, student.Standard)
	}
}
INFO