处理存储在文件中的大量 JSON 数组时,避免将整个数组加载到内存中至关重要,因为这可能会导致输出 -内存错误。相反,请考虑按元素流式传输 JSON 数据。
encoding/json 文档中演示了实现此目的的一种方法:
package main import ( "encoding/json" "fmt" "log" "strings" ) func main() { const jsonStream = ` [ {"Name": "Ed", "Text": "Knock knock."}, {"Name": "Sam", "Text": "Who's there?"}, {"Name": "Ed", "Text": "Go fmt."}, {"Name": "Sam", "Text": "Go fmt who?"}, {"Name": "Ed", "Text": "Go fmt yourself!"} ] ` type Message struct { Name, Text string } dec := json.NewDecoder(strings.NewReader(jsonStream)) // read open bracket t, err := dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) // while the array contains values for dec.More() { var m Message // decode an array value (Message) err := dec.Decode(&m) if err != nil { log.Fatal(err) } fmt.Printf("%v: %v\n", m.Name, m.Text) } // read closing bracket t, err = dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) }
在此示例代码中:
这种方法允许您流式传输大型 JSON 数组,而无需将整个数据结构加载到内存中,从而优化资源使用并实现高效处理。
以上是如何有效地处理大型 JSON 数组而不将它们完全加载到 Go 内存中?的详细内容。更多信息请关注PHP中文网其他相关文章!