„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie lassen sich große Datenströme in JSON effizient marsalieren, ohne sie in den Speicher zu laden?

Wie lassen sich große Datenströme in JSON effizient marsalieren, ohne sie in den Speicher zu laden?

Veröffentlicht am 31.10.2024
Durchsuche:649

How to Efficiently Marshal Large Data Streams in JSON without Loading into Memory?

Marshaling großer Datenströme in JSON ohne Laden in den Speicher

Oft entsteht die Notwendigkeit, große Datenströme in JSON zu kodieren, aber das Ganze zu laden Das gleichzeitige Streamen in den Speicher kann unpraktisch sein. In diesem Artikel werden Möglichkeiten untersucht, diese Herausforderung ohne die integrierte json.Marshaler-Schnittstelle zu meistern.

Kodierung mit json.Encoder: Eine Einschränkung

Versuche, einen großen Stream zu kodieren von Daten mit json.Encoder schlägt fehl, da er Kanäle (Chan-String) im Speicher nicht verarbeiten kann.

Benutzerdefinierte JSON-Kodierung

In Ermangelung eines geeigneten Builds -in-Lösung ist eine benutzerdefinierte JSON-Codierung erforderlich. Dazu gehört die manuelle Erstellung der JSON-Zeichenfolge, wie im folgenden Snippet gezeigt:

w := os.Stdout
w.WriteString(`{ "Foo": "`   t.Foo   `", "Bar": [`)

for x := range t.Bar {
    _ = json.NewEncoder(w).Encode(x)
    w.WriteString(`,`)
}

w.WriteString(`]}`)

Encoding/JSON für Kanalunterstützung erweitern

Um das Encoding/JSON-Paket mit Kanalunterstützung zu erweitern, können Sie den ReflectValueQuoted ändern Funktion in Encoding/json/encode.go. Fügen Sie insbesondere einen Fall für Kanäle hinzu, der dem folgenden ähnelt:

case reflect.Chan:
    e.WriteByte('[')
    i := 0
    for {
        x, ok := v.Recv()
        if !ok {
            break
        }
        if i > 0 {
            e.WriteByte(',')
        }
        e.reflectValue(x)
        i  
    }
    e.WriteByte(']')

Fazit

Während das Paket „encoding/json“ derzeit keine Kanalkodierung unterstützt, bietet dieser Artikel alternative Ansätze zum Marshallen großer Datenströme in JSON effizient. Mit der benutzerdefinierten Kodierung können Daten direkt in die JSON-Ausgabe gestreamt werden, während die Erweiterung von „encoding/json“ eine robustere Lösung bietet.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3