流式處理大數據的 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中文網其他相關文章!