Contourner l'échappement des caractères HTML dans json.Marshal
La fonction json.Marshal de Go échappe automatiquement certains caractères, y compris < et >, pour éviter toute interprétation erronée par les navigateurs. Cependant, ce comportement peut s'avérer indésirable lors de la sérialisation de données XML, car il modifie le contenu prévu.
Malheureusement, il n'est pas possible de désactiver l'échappement de caractères à l'aide de la seule fonction json.Marshal. Le code source révèle que les caractères d'échappement sont codés en dur comme étant vrais, garantissant que < et > sont toujours convertis respectivement en "u003c" et "u003e". Cette limitation s'étend à l'implémentation de méthodes MarshalJSON personnalisées, car elles reposent toujours sur l'implémentation interne de json.Marshal.
Pour surmonter cet obstacle, une solution de contournement consiste à définir une fonction personnalisée pour le marshalling. Voici une version modifiée de votre type Track qui implémente une méthode JSON :
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 }
En utilisant cette méthode JSON personnalisée, vous pouvez contrôler le comportement d'échappement en définissant explicitement SetEscapeHTML(false).
Si vous avez besoin d'une solution générique pour une structure, vous pouvez définir la fonction suivante :
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 }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!