Marshalling von []Byte in JSON: Grundlegendes zur String-Darstellung
Beim Versuch, []Byte-Werte in das JSON-Format zu marshalieren, kann es zu seltsamen Problemen kommen String-Ausgaben wie die in der ursprünglichen Frage hervorgehobene. In diesem Artikel geht es um beide Seiten des Rätsels: wie man []Byte korrekt in JSON marshallt und warum sich die Ausgabe in die beobachtete Zeichenfolge umwandelt.
Lösung: []Byte in JSON Marshaling
Laut der offiziellen Golang-Dokumentation für json.Marshal werden Array- und Slice-Werte als JSON-Arrays kodiert. Eine Ausnahme von dieser Regel gilt für []Byte-Slices, die speziell als Base64-codierte Zeichenfolgen codiert sind. Umgekehrt werden Null-Slices als Null-JSON-Objekte codiert.
Um []Byte genau in JSON zumarshalieren, muss es daher während des Marshalling-Prozesses explizit in eine Base64-codierte Zeichenfolge umgewandelt werden.
Grund: Base64-Codierung für []Byte
Das im Original beobachtete Verhalten Die Ausgabe der Frage ist eine direkte Folge des Kodierungsmechanismus, der für []Byte-Slices in JSON verwendet wird. JSON kann rohe Byte-Slices nicht nativ darstellen; Daher werden sie in Base64-codierte Zeichenfolgen umgewandelt. Die Base64-Kodierung ermöglicht die Darstellung von Binärdaten als Zeichenfolge und eignet sich somit für die Übertragung und Speicherung in textbasierten Formaten wie JSON.
Zum Beispiel stellt die in der Ausgabe angezeigte Zeichenfolge „AAAAAQID“ die Base64- kodierte Version des []Byte-Slices [0, 0, 0, 1, 2, 3].
Um das ursprüngliche Byte-Slice aus seiner Base64-Darstellung abzurufen, Sie können die Funktion base64.StdEncoding.DecodeString verwenden, wie im folgenden Code dargestellt:
import "encoding/base64" func decodeBase64(encodedString string) ([]byte, error) { return base64.StdEncoding.DecodeString(encodedString) }
Fazit
Das Marshaling von []Byte in JSON beinhaltet die explizite Codierung als Base64-Strings, eine Technik, die auf der Notwendigkeit basiert, Binärdaten in einem textbasierten Format darzustellen. Das Verständnis dieses Codierungsmechanismus hilft, die scheinbar seltsamen String-Ausgaben zu entmystifizieren, die während des Marshalling-Prozesses auftreten.
Das obige ist der detaillierte Inhalt vonWarum führt das Marshaling von []Byte zu JSON zu einer Base64-codierten Zeichenfolge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!