希望这能回答你的问题。注释掉的部分是用于一一解码所有对象,因此您甚至可以对其进行优化,以便多个 goroutine 可以同时进行解码。


包主


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)

        }

    */

}

输出


Name: "abc", Age: 10