Heim >Backend-Entwicklung >Golang >Warum führt das JSON-Marshalling eines Go[]Bytes zu einer Base64-codierten Zeichenfolge?
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!