Heim > Artikel > Backend-Entwicklung > Warum kodiert json.Marshal json.RawMessage als Base64?
Marshalling von json.RawMessage: Base64-Kodierung entschlüsseln
Beim Versuch, ein json.RawMessage-Objekt zu marshallieren, stoßen Sie möglicherweise auf eine unerwartete Base64-Kodierung string anstelle des gewünschten JSON-Strings als Ausgabe. Um dieses Verhalten zu entschlüsseln, werfen wir einen Blick auf das zugrunde liegende Konzept.
json.RawMessage ist, wie der Name schon sagt, darauf ausgelegt, JSON-Rohdaten als Byte-Slice zu verarbeiten. Wenn Sie versuchen, eine RawMessage mit json.Marshal zu Marshallen, besteht das Standardverhalten darin, sie so zu codieren, als wäre sie ein reguläres []Byte. Dies führt zu der von Ihnen beobachteten Base64-Codierung.
Um dies zu umgehen, besteht die Lösung darin, einen Zeiger auf die RawMessage an json.Marshal zu übergeben. Dies liegt daran, dass die MarshalJSON-Methode von RawMessage, die für den Marshalling-Prozess verantwortlich ist, einen Zeiger als Argument erwartet. Ohne den Zeiger kann das Byte-Slice nicht wie vorgesehen korrekt zurückgegeben werden.
Indem Sie Ihren Code so ändern, dass er einen Zeiger übergibt, wie unten gezeigt, erhalten Sie die erwartete JSON-Zeichenfolge als Ausgabe:
package main import ( "encoding/json" "fmt" ) func main() { raw := json.RawMessage(`{"foo":"bar"}`) j, err := json.Marshal(&raw) if err != nil { panic(err) } fmt.Println(string(j)) }
Ausgabe:
{"foo":"bar"}
Das obige ist der detaillierte Inhalt vonWarum kodiert json.Marshal json.RawMessage als Base64?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!