Heim >Backend-Entwicklung >Golang >Wie verhindert man das JSON-Escape von „' in „json.Marshal' von Go?
JSON-Escape von „<“ verhindern und „>“ mit json.Marshal
Bei der Verwendung von json.Marshal zum Konvertieren einer Struktur in JSON werden Sonderzeichen wie „<“ verwendet. und „>“ werden automatisch in ihre Unicode-Äquivalente maskiert. Es kann jedoch Fälle geben, in denen Sie möchten, dass diese Zeichen in ihrer ursprünglichen Form erhalten bleiben.
Problemstellung
Betrachten Sie das folgende Go-Programm:
package main import ( "encoding/json" "fmt" ) type Track struct { XmlRequest string `json:"xmlRequest"` } func main() { message := new(Track) message.XmlRequest = "<car><mirror>XML</mirror></car>" fmt.Println("Before Marshal", message) messageJSON, _ := json.Marshal(message) fmt.Println("After marshal", string(messageJSON)) }
Ausgabe:
Before Marshal {<car><mirror>XML</mirror></car>} After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
Wie Sie sehen können, ist das „<“ und „>“ Zeichen wurden in „u003c“ bzw. „u003e“ maskiert.
Lösung
Ab Go 1.7 bietet json.Marshal keine Option zum Deaktivieren der HTML-Escape-Funktion . Es gibt jedoch eine Problemumgehung mithilfe einer benutzerdefinierten Funktion:
func (t *Track) JSON() ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Indem Sie diese Funktion anstelle von json.Marshal aufrufen, können Sie das Escapezeichen von „<“ verhindern. und „>“.
Ausgabe:
{"xmlRequest":"<car><mirror>XML</mirror></car>"}
Das obige ist der detaillierte Inhalt vonWie verhindert man das JSON-Escape von „' in „json.Marshal' von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!