Im Bereich des JSON-Marshallings wird versucht, ein Byte-Slice ([]Byte) in umzuwandeln JSON liefert oft ein unerwartetes Ergebnis – eine scheinbar seltsame Zeichenfolge. Lassen Sie uns die Gründe dafür untersuchen und die richtige Methode für die JSON-Konvertierung erkunden.
Wie in der Go-Standardbibliothek dokumentiert (https://golang. org/pkg/encoding/json/#Marshal) werden Byte-Slices beim JSON-Marshalling eindeutig behandelt. Anstatt direkt in JSON-Arrays konvertiert zu werden, werden sie mit Base64 codiert, um einen String zu erzeugen. Dies führt oft zu verwirrenden Ergebnissen.
Betrachten Sie den folgenden Codeausschnitt:
package main import ( "encoding/json" "fmt" "os" ) func main() { type ColorGroup struct { ByteSlice []byte } group := ColorGroup{ ByteSlice: []byte{0, 0, 0, 1, 2, 3}, } b, err := json.Marshal(group) if err != nil { fmt.Println("error:", err) } os.Stdout.Write(b) }
Das Ausführen dieses Codes erzeugt die folgende Ausgabe:
{"ByteSlice":"AAAAAQID"}
Die „seltsame Zeichenfolge“ AAAAAQID ist die Base64-codierte Darstellung des Byte-Slices [0 0 0 1 2 3].
Um das ursprüngliche Byte-Slice aus der codierten Zeichenfolge abzurufen, können Sie das Base64-Paket in Go verwenden:
package main import ( "encoding/base64" "encoding/json" "fmt" "os" ) func main() { type ColorGroup struct { ByteSlice []byte } group := ColorGroup{} b, err := json.Marshal(group) if err != nil { fmt.Println("error:", err) } err = json.Unmarshal(b, &group) if err != nil { fmt.Println("error:", err) } decodedBytes, err := base64.StdEncoding.DecodeString(group.ByteSlice) if err != nil { fmt.Println("error:", err) } fmt.Println(decodedBytes) }
Ausgabe:
[0 0 0 1 2 3]
Verstehen, warum Byte Slices zeigen dieses Verhalten während des JSON-Marshallings, was für eine effektive Datenverwaltung von entscheidender Bedeutung ist. Durch die Verwendung der Base64-Codierungs- und Decodierungsmechanismen wird es zu einer einfachen Aufgabe, nahtlos zwischen Byte-Slices und JSON-Daten zu konvertieren.
Das obige ist der detaillierte Inhalt vonWarum wird mein Go-Byte-Slice in eine „seltsame Zeichenfolge' konvertiert, wenn es in JSON gemarshallt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!