Heim >Backend-Entwicklung >Golang >Warum führt das JSON-Marshalling eines Go[]Bytes zu einer Base64-codierten Zeichenfolge?

Warum führt das JSON-Marshalling eines Go[]Bytes zu einer Base64-codierten Zeichenfolge?

DDD
DDDOriginal
2024-12-07 02:46:15212Durchsuche

Why Does JSON Marshaling of a Go []byte Result in a Base64-Encoded String?

Marshalling von []Byte in JSON: Decoding the Mysteries

Beim Versuch, ein Byte-Slice ([]Byte) in das JSON-Format zu Marshallen, Es kommt häufig vor, dass als Ausgabe eine seltsame, codierte Zeichenfolge angezeigt wird. Um dieses eigenartige Verhalten genauer zu untersuchen, untersuchen wir das in der Frage bereitgestellte Codebeispiel:

type ColorGroup struct {
    ByteSlice    []byte
    SingleByte   byte
    IntSlice     []int
}
...
b, err := json.Marshal(group)

Der JSON-Marshalling-Prozess konvertiert eine Go-Datenstruktur in ihre JSON-Darstellung. Es ist wichtig zu verstehen, wie []byte während dieser Konvertierung behandelt wird. Laut der Go-Dokumentation für json.Marshal „kodiert []Byte als Base64-kodierte Zeichenfolge.“

The Encoding Enigma

Das bedeutet, wann Wenn Sie versuchen, ein []Byte in JSON zu Marshallen, wird das Slice nicht direkt als Array in die JSON-Ausgabe eingebunden. Stattdessen wird es in eine Base64-codierte Zeichenfolge konvertiert. Diese Konvertierung wird verwendet, da JSON keinen nativen Byte-Slice-Typ hat.

Dekodierung der kodierten Zeichenfolge

Um die kodierte Zeichenfolge wieder in ihr ursprüngliches Byte-Slice zu dekodieren, müssen Sie kann das Go base64-Paket verwenden. So würde es aussehen:

import (
    "encoding/base64"
    "log"
)
...
b64 := "AAAAAQID" // encoded byte slice from JSON
b, err := base64.StdEncoding.DecodeString(b64)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%v", b) // Outputs: [0 0 0 1 2 3]

Warum der seltsame String?

Der codierte String, den Sie gefunden haben, ist das Ergebnis des Base64-Codierungsprozesses. Bei der Base64-Kodierung werden Binärdaten durch eine Teilmenge von ASCII-Zeichen ersetzt, um sie für die Übertragung oder Speicherung in nicht-binären Formaten wie JSON geeignet zu machen. Im Fall des Byte-Slices wandelt diese Kodierung die Byte-Werte in eine String-Darstellung um.

Das obige ist der detaillierte Inhalt vonWarum führt das JSON-Marshalling eines Go[]Bytes zu einer Base64-codierten Zeichenfolge?. 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