Heim > Artikel > Backend-Entwicklung > Warum führt das Marshalling eines json.RawMessage-Werts zu einer Base64-codierten Zeichenfolge anstelle von rohem JSON?
Marshalling von json.RawMessage gibt Base64-codierte Zeichenfolge zurück
Frage:
Beim Marshalling von a json.RawMessage-Wert, warum ist die Ausgabe eine Base64-codierte Zeichenfolge anstelle der Rohzeichenfolge? JSON?
Hintergrund:
Der folgende Code veranschaulicht das Problem:
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)) }
Erwartete Ausgabe:
{"foo":"bar"}
Tatsächlich Ausgabe:
"eyJmb28iOiJiYXIifQ=="
Antwort:
Die MarshalJSON-Methode des json.RawMessage-Typs gibt einfach das zugrunde liegende Byte-Slice zurück. Damit json.RawMessage jedoch ordnungsgemäß funktioniert, muss der an json.Marshal übergebene Wert ein Zeiger sein.
Lösung:
Um das Problem zu beheben, aktualisieren Sie den Code wie folgt:
j, err := json.Marshal(&raw)
Das obige ist der detaillierte Inhalt vonWarum führt das Marshalling eines json.RawMessage-Werts zu einer Base64-codierten Zeichenfolge anstelle von rohem JSON?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!