流式传输大型 JSON 文件
尝试一次加载所有数据时,从文件中解码大量 JSON 数组可能会遇到内存问题。为了解决这一挑战,可以采用流技术。
在提供的示例中,在大量 JSON 文件上使用 json.Unmarshal 会因整个数组加载而导致内存耗尽。
为了避免这种情况,考虑按顺序流式传输 JSON 元素。以下是基于 Golang 文档示例的方法:
import ( "encoding/json" "fmt" "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)) for dec.More() { var m Message if err := dec.Decode(&m); err != nil { fmt.Println(err) return } fmt.Printf("%v: %v\n", m.Name, m.Text) } }
通过流式传输元素,代码按顺序处理它们,从而减少内存消耗。请注意,此示例基于字符串输入;可以根据需要对其进行修改以从文件中读取。
以上是如何在Go中高效处理大型JSON文件以避免内存耗尽?的详细内容。更多信息请关注PHP中文网其他相关文章!