高效解碼大流 JSON
巨大的 JSON 數組在一次性解碼時可能會帶來記憶體挑戰。為了解決這個問題,建議採用逐一迭代元素的流式方法。
以元素串流 JSON 元素
encoding/json 套件提供一種串流 JSON 資料的方法。以下是一個範例:
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!"} ]` dec := json.NewDecoder(strings.NewReader(jsonStream)) // skip the opening bracket dec.Token() // read and process each element for dec.More() { var message Message if err := dec.Decode(&message); err != nil { log.Fatal(err) } fmt.Printf("%v: %v\n", message.Name, message.Text) } // skip the closing bracket dec.Token() }
在此程式碼中,我們使用 json.NewDecoder 為 JSON 串流建立解碼器。然後,我們迭代流,跳過左括號和右括號({ 和 }),並使用 dec.More() 檢查是否還有更多元素要處理。
對於每個元素,我們建立一個 Message 結構體並使用 dec.Decode 將 JSON 資料解碼為其中。然後,我們列印訊息的名稱和文字欄位。
這種方法允許我們處理大型 JSON 數組,而無需將整個數組載入到記憶體中,從而避免記憶體不足錯誤並提高效能。
以上是如何在 Go 中高效解碼大型串流 JSON 資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!