HTML-Zeichen-Escape in json.Marshal umgehen
Die json.Marshal-Funktion von Go maskiert automatisch bestimmte Zeichen, einschließlich < und >, um Fehlinterpretationen durch Browser zu verhindern. Dieses Verhalten kann jedoch bei der Serialisierung von XML-Daten unerwünscht sein, da es den beabsichtigten Inhalt verändert.
Leider ist es nicht möglich, die Zeichen-Escape-Funktion allein mit der json.Marshal-Funktion zu deaktivieren. Aus dem Quellcode geht hervor, dass Zeichen-Escapezeichen fest als wahr codiert sind, wodurch sichergestellt wird, dass < und > werden immer in „u003c“ bzw. „u003e“ konvertiert. Diese Einschränkung erstreckt sich auch auf die Implementierung benutzerdefinierter MarshalJSON-Methoden, da diese weiterhin auf der internen json.Marshal-Implementierung basieren.
Um dieses Hindernis zu überwinden, besteht eine Problemumgehung darin, eine benutzerdefinierte Funktion für das Marshalling zu definieren. Hier ist eine modifizierte Version Ihres Track-Typs, die eine JSON-Methode implementiert:
import "bytes" import "encoding/json" type Track struct { XmlRequest string `json:"xmlRequest"` } func (t *Track) JSON() ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Mit dieser benutzerdefinierten JSON-Methode können Sie das Escape-Verhalten steuern, indem Sie SetEscapeHTML(false) explizit festlegen.
Wenn Sie eine generische Lösung für eine beliebige Struktur benötigen, können Sie die folgende Funktion definieren:
import "bytes" import "encoding/json" func JSONMarshal(t interface{}) ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Das obige ist der detaillierte Inhalt vonWie umgehe ich das HTML-Zeichen-Escape in Gos „json.Marshal'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!