Heim  >  Artikel  >  Backend-Entwicklung  >  Wie werden JSON-Streams gemarshallt, ohne das gesamte Objekt in den Speicher zu laden?

Wie werden JSON-Streams gemarshallt, ohne das gesamte Objekt in den Speicher zu laden?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 19:16:29347Durchsuche

 How to Marshal JSON Streams Without Loading the Entire Object in Memory?

Marshaling von JSON-Streams, ohne ganze Objekte zu laden

Ihr Ziel ist es, einen großen Datenstrom zu kodieren, ohne den gesamten Strom im Speicher zu halten. Während JSON ein gängiges Datenformat ist, bietet die json.Marshaler-Schnittstelle der Standardbibliothek keine einfache Möglichkeit, dies zu erreichen.

Benutzerdefinierte String-Erstellung

Derzeit Sie Sie erstellen die JSON-Zeichenfolge manuell mit WriteString, was angesichts des Mangels an integrierter Funktionalität ein sinnvoller Ansatz ist. Diese Methode stellt sicher, dass Sie jeweils nur kleine Datenblöcke verarbeiten.

Kodierung/JSON ändern

Wenn Sie bereit sind, das Kodierungs-/JSON-Paket zu ändern, dann tun Sie das könnte die Funktion „reflectValueQuoted“ patchen, um Kanäle als Arrays zu behandeln. Dies würde es Ihnen ermöglichen, Kanäle zu durchlaufen und ihre Werte zu kodieren, sobald sie verfügbar sind, ohne den gesamten Stream zu puffern.

Code-Patch-Beispiel

Hier ist eine modifizierte Version der Kodierung/ JSON-Code, den Sie verwenden könnten:

<code class="go">// Inside switch:
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(']')</code>

Fazit

Die einzige aktuelle Option zum Marshallen von JSON-Streams, ohne die gesamten Daten zu laden, besteht darin, die Zeichenfolge manuell nach Ihren Wünschen zu erstellen. Ich arbeite gerade am Paket „encoding/json“ oder ändere es. Das Ändern des Pakets erfordert einige Kenntnisse der internen Implementierung und sollte sorgfältig überlegt werden.

Das obige ist der detaillierte Inhalt vonWie werden JSON-Streams gemarshallt, ohne das gesamte Objekt in den Speicher zu laden?. 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