


Wie gehen Sie mit []Byte-Feldern in Go um, wenn Sie JSON kodieren und dekodieren?
JSON mit []Byte-Feldern in Go kodieren und dekodieren
In Go umfasst die Arbeit mit JSON-Daten häufig die Kodierung und Dekodierung von Datenstrukturen und aus dem JSON-Format. Ein häufiges Szenario tritt auf, wenn versucht wird, als []Byte-Felder dargestellte Zeichenfolgen in JSON zu serialisieren.
Base64-Konvertierung durch json.Marshal()
Standardmäßig der JSON Die Methode .Marshal() behandelt []Byte-Felder speziell. Anstatt sie als Rohbytes zu serialisieren, werden sie als Base64-codierte Zeichenfolgen codiert. Diese Konvertierung ist notwendig, da JSON keine native Darstellung für Binärdaten hat.
Abweichungen von der erwarteten Ausgabe
Um dieses Verhalten zu veranschaulichen, betrachten Sie den folgenden Codeausschnitt:
<code class="go">package main import ( "fmt" "encoding/json" ) type Msg struct { Content []byte } func main() { helloStr := "Hello" helloSlc := []byte(helloStr) fmt.Println(helloStr, helloSlc) obj := Msg{helloSlc} json, _ := json.Marshal(obj) fmt.Println(string(json)) }</code>
Ausgabe:
Hello [72 101 108 108 111] {"Content":"SGVsbG8="}
Wie Sie sehen können, enthält die JSON-Zeichenfolge die Base64-codierte Version der „Hello“-Zeichenfolge anstelle der Originalzeichenfolge selbst.
Verstehen der Konvertierung
Der Grund für dieses Verhalten liegt in der JSON-Spezifikation. dem eine native Darstellung für Rohbytes fehlt. Durch die Base64-Codierung des []Byte-Felds gewährleistet json.Marshal() die Kompatibilität mit dem JSON-Format und bewahrt gleichzeitig die Integrität der Originaldaten.
Umgang mit benutzerdefinierter Codierung
Wenn Sie es vorziehen, die Rohbytes beizubehalten, anstatt sie mit Base64 zu kodieren, können Sie eine benutzerdefinierte Serialisierungs- und Deserialisierungslogik implementieren. Dies beinhaltet normalerweise das Überschreiben der Methoden MarshalJSON() und UnmarshalJSON() Ihrer Struktur.
Benutzerdefiniertes Marshalling-Beispiele:
<code class="go">func (m *Msg) MarshalJSON() ([]byte, error) { type Alias Msg return json.Marshal((*Alias)(m)) }</code>
<code class="go">func (m *Msg) UnmarshalJSON(b []byte) error { type Alias Msg var a Alias if err := json.Unmarshal(b, &a); err != nil { return err } *m = Msg(a) return nil }</code>
Das obige ist der detaillierte Inhalt vonWie gehen Sie mit []Byte-Feldern in Go um, wenn Sie JSON kodieren und dekodieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?
