Heim > Backend-Entwicklung > Golang > Warum wird mein Go-Byte-Slice in eine „seltsame Zeichenfolge' konvertiert, wenn es in JSON gemarshallt wird?

Warum wird mein Go-Byte-Slice in eine „seltsame Zeichenfolge' konvertiert, wenn es in JSON gemarshallt wird?

Barbara Streisand
Freigeben: 2024-12-15 11:00:13
Original
1002 Leute haben es durchsucht

Why Does My Go Byte Slice Convert to a

Fehlerbehebung bei der Byte-zu-JSON-Konvertierung: „Seltsame Zeichenfolge“ aufgetreten

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.

Die Natur des „Strange String“

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.

Ein praktisches Beispiel

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)
}
Nach dem Login kopieren

Das Ausführen dieses Codes erzeugt die folgende Ausgabe:

{"ByteSlice":"AAAAAQID"}
Nach dem Login kopieren

Die „seltsame Zeichenfolge“ AAAAAQID ist die Base64-codierte Darstellung des Byte-Slices [0 0 0 1 2 3].

Wiederherstellen des Byte-Slices

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)
}
Nach dem Login kopieren

Ausgabe:

[0 0 0 1 2 3]
Nach dem Login kopieren

Schlussfolgerung

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!

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