流式处理大数据的 JSON 数组
将大量 JSON 数组解码到内存中可能会出现问题,从而导致内存问题。为了解决这个问题,流式传输 JSON 元素是一种更有效的解决方案。
Go 中的encoding/json 包提供了一种逐个流式传输 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 the opening bracket. t, err := dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) // Loop through the array elements. for dec.More() { var m Message // Decode the current element. err = dec.Decode(&m) if err != nil { log.Fatal(err) } fmt.Printf("%v: %v\n", m.Name, m.Text) } // Read the closing bracket. t, err = dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) }
在此示例中,我们显式处理 JSON 数组的左括号和右括号并单独解码每个元素,使我们能够高效地流式传输 JSON 数据,而无需内存开销。
以上是如何在 Go 中高效地流式传输和解码大型 JSON 数组?的详细内容。更多信息请关注PHP中文网其他相关文章!