In Go maskiert die json.Marshal-Funktion automatisch spitze Klammern (<, > ;) und kaufmännische Und-Zeichen (&) in Zeichenfolgen. Dies kann jedoch in bestimmten Situationen unerwünscht sein.
Betrachten Sie das folgende Beispiel:
package main import ( "fmt" "encoding/json" ) 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)) }</p> <p>Dieser Code gibt die folgende Ausgabe aus:</p> <pre class="brush:php;toolbar:false">Before Marshal {xmlRequest:<car><mirror>XML</mirror></car>} After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
Beachten Sie, dass die Spitze Klammern und kaufmännisches Und in der XML-Anforderungszeichenfolge werden im JSON mit Escapezeichen versehen Ausgabe.
Vor Go 1.7 war es unmöglich zu verhindern, dass json.Marshal diesen Zeichen entkommt. Allerdings gibt es jetzt einen Workaround:
func (t *Track) JSON() ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Diese Funktion erstellt zunächst einen Bytepuffer und einen JSON-Encoder. Anschließend wird die EscapeHTML-Option auf „false“ gesetzt, um zu verhindern, dass der Encoder HTML-Zeichen, einschließlich spitzer Klammern und kaufmännischer Und-Zeichen, maskiert.
Wenn Sie diese Lösung auf Ihren eigenen benutzerdefinierten Typ anwenden möchten, ändern Sie die JSON()-Funktion als folgt:
func JSONMarshal(t interface{}) ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Jetzt können Sie JSONMarshal verwenden, um jeden benutzerdefinierten Typ zu marsalieren und das Escape von spitzen Klammern und zu verhindern kaufmännische Und-Zeichen.
Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass JSON Marshal in Go spitze Klammern und kaufmännische Und-Zeichen umgeht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!