Hope this answers your question. Commented out part is for decoding all the objects one by one and hence you even optimize it such that multiple goroutines can do the decoding concurrently.
package main
import (
"encoding/json"
"fmt"
"log"
"os"
)
type jsonStore struct {
Name string
Age int
}
func main() {
file, err := os.Open("text.json")
if err != nil {
log.Println("Can't read file")
}
defer file.Close()
// NewDecoder that reads from file (Recommended when handling big files)
// It doesn't keeps the whole in memory, and hence use less resources
decoder := json.NewDecoder(file)
var data jsonStore
// Reads the array open bracket
decoder.Token()
// Decode reads the next JSON-encoded value from its input and stores it
decoder.Decode(&data)
// Prints the first single JSON object
fmt.Printf("Name: %#v, Age: %#v\n", data.Name, data.Age)
/*
// If you want to read all the objects one by one
var dataArr []jsonStore
// Reads the array open bracket
decoder.Token()
// Appends decoded object to dataArr until every object gets parsed
for decoder.More() {
decoder.Decode(&data)
dataArr = append(dataArr, data)
}
*/
}
Output
Name: "abc", Age: 10