Warum wird mein „json.RawMessage' als Base64 gemarshallt?

Susan Sarandon
Freigeben: 2024-11-09 21:35:02
Original
492 Leute haben es durchsucht

Why Does My `json.RawMessage` Marshal as Base64?

Marshalling von json.RawMessage: Enthüllung des Grundes hinter der Base64-Codierung

In diesem faszinierenden Szenario sind Sie beim Versuch, dies zu tun, auf ein ungewöhnliches Verhalten gestoßen Marshallen Sie eine json.RawMessage-Instanz. Überraschenderweise sind Sie nicht auf den erwarteten uncodierten JSON-String gestoßen, sondern auf eine sorgfältig Base64-codierte Version. Um dieses Rätsel zu lösen, tauchen wir in die Tiefen der zugrunde liegenden Mechanik ein.

Es ist wichtig zu erkennen, dass bei der Verwendung der Marshal-Funktion auf einer json.RawMessage der entscheidende Faktor darin liegt, sicherzustellen, dass der Eingabewert vorhanden ist Tatsache ein Hinweis. Diese scheinbar subtile Unterscheidung spielt eine entscheidende Rolle im Verhalten von json.RawMessage.

Wie Sie zu Recht betont haben, ist die Implementierung von MarshalJSON durch json.RawMessage so konzipiert, dass sie einfach das zugrunde liegende Byte-Slice zurückgibt. Wenn der Eingabewert jedoch kein Zeiger ist, wendet die Marshal-Funktion vor der Ausgabe automatisch die Base64-Codierung auf das Byte-Slice an.

Um diese Situation zu beheben und das gewünschte Ergebnis zu erhalten, ist die Lösung so einfach wie Übergeben ein Zeiger auf Ihre json.RawMessage. Auf diese Weise weisen Sie die Marshal-Funktion effektiv an, das zugrunde liegende Byte-Slice direkt zu bearbeiten und so den unerwünschten Base64-Kodierungsprozess zu umgehen.

Bedenken Sie den folgenden modifizierten Codeausschnitt:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    raw := json.RawMessage(`{"foo":"bar"}`)
    j, err := json.Marshal(&raw) // Pass a pointer to json.RawMessage
    if err != nil {
        panic(err)
    }
    fmt.Println(string(j))
}
Nach dem Login kopieren

Von Wenn Sie diese subtile, aber wesentliche Änderung implementieren, können Sie jetzt sicher das erwartete Ergebnis vorhersehen:

{"foo":"bar"}
Nach dem Login kopieren

Dieser geänderte Code entspricht den Anforderungen der Marshal-Funktion an zeigerbasierten Eingabewerten und eliminiert so effektiv die unerwünschte Base64-Codierung. Ausgestattet mit diesem neu gewonnenen Wissen können Sie nun ähnliche Herausforderungen sicher angehen und das gewünschte JSON-Marshalling-Verhalten in Ihren Go-Anwendungen sicherstellen.

Das obige ist der detaillierte Inhalt vonWarum wird mein „json.RawMessage' als Base64 gemarshallt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage