如何从 Golang 中包含 json 对象列表的文件中读取单个 json 对象

[

  {

   "name" : "abc",

   "age" : 10

  },

  {

   "name" : "def",

   "age" : 12

  }

]

这是我的 text.json 文件,它有 json 对象数组,所以我想要实现的是从文件中读取单个对象,而不是使用 golang 读取整个 json 对象的数组。我不认为 ioutil.ReadAll() 会给我想要的结果。


红糖糍粑
浏览 146回答 2
2回答

至尊宝的传说

希望这能回答您的问题。注释掉的部分是用于一一解码所有对象,因此您甚至可以对其进行优化,以便多个 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

一只甜甜圈

您可以打开该文件,并使用 json.Decoder 开始读取该文件。读取数组第一个元素的代码草图如下所示:decoder:=json.NewDecoder(f)t,err:=decoder.Token()tok, ok:=t.(json.Delim) if ok {   if tok=='[' {       for decoder.More() {         decoder.Decode(&oneEntry)       }   }}您需要添加错误处理。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go