處理儲存在檔案中的大量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中文網其他相關文章!