Heim >Backend-Entwicklung >Golang >Wie kann ich große Streaming-JSON-Daten in Go effizient dekodieren?

Wie kann ich große Streaming-JSON-Daten in Go effizient dekodieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-18 22:49:10265Durchsuche

How Can I Efficiently Decode Large Streaming JSON Data in Go?

Effizientes Dekodieren großer JSON-Streams

Enorme JSON-Arrays können eine Speicherherausforderung darstellen, wenn sie auf einmal dekodiert werden. Um dieses Problem zu lösen, ist es ratsam, einen Streaming-Ansatz zu verwenden, der die Elemente einzeln durchläuft.

JSON-Element für Element streamen

Das Paket „encoding/json“ bietet eine Methode zum Streamen von JSON-Daten. Hier ist ein Beispiel:

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()
}

In diesem Code verwenden wir einen json.NewDecoder, um einen Decoder für den JSON-Stream zu erstellen. Anschließend durchlaufen wir den Stream, überspringen die öffnenden und schließenden Klammern ({ und }) und verwenden dec.More(), um zu prüfen, ob weitere Elemente verarbeitet werden müssen.

Für jedes Element erstellen wir eine Nachrichtenstruktur und dekodieren Sie die JSON-Daten mit dec.Decode darin. Anschließend drucken wir die Felder „Name“ und „Text“ der Nachricht aus.

Dieser Ansatz ermöglicht es uns, große JSON-Arrays zu verarbeiten, ohne das gesamte Array in den Speicher zu laden, wodurch Fehler aufgrund von Speichermangel vermieden und die Leistung verbessert werden.

Das obige ist der detaillierte Inhalt vonWie kann ich große Streaming-JSON-Daten in Go effizient dekodieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn