Heim >Backend-Entwicklung >Golang >Wie umgehe ich das HTML-Zeichen-Escape in Gos „json.Marshal'?

Wie umgehe ich das HTML-Zeichen-Escape in Gos „json.Marshal'?

Linda Hamilton
Linda HamiltonOriginal
2024-12-11 14:01:10889Durchsuche

How to Bypass HTML Character Escaping in Go's `json.Marshal`?

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!

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