Heim >Backend-Entwicklung >Golang >Wie verhindert man das JSON-Escape von „' in „json.Marshal' von Go?

Wie verhindert man das JSON-Escape von „' in „json.Marshal' von Go?

Linda Hamilton
Linda HamiltonOriginal
2024-12-16 08:41:13128Durchsuche

How to Prevent JSON Escaping of

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn