Streaming von JSON-Arrays für große Datenmengen
Das Dekodieren großer JSON-Arrays in den Speicher kann problematisch sein und zu Speicherproblemen führen. Um dieses Problem zu lösen, ist das Streamen von JSON-Elementen eine effizientere Lösung.
Das Paket „encoding/json“ in Go bietet einen Mechanismus zum Streamen von JSON-Daten Element für Element. Hier ist ein erweitertes Beispiel:
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) }
In diesem Beispiel verarbeiten wir explizit die öffnenden und schließenden Klammern des JSON-Arrays und dekodieren jedes Element einzeln, sodass wir die JSON-Daten effizient und ohne Speicheraufwand streamen können.
Das obige ist der detaillierte Inhalt vonWie kann man große JSON-Arrays in Go effizient streamen und dekodieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!