Maison >développement back-end >Golang >Comment empêcher JSON de s'échapper de « » dans « json.Marshal » de Go ?
Empêcher l'échappement JSON de "<" et ">" avec json.Marshal
Lors de l'utilisation de json.Marshal pour convertir une structure en JSON, des caractères spéciaux comme "<" et ">" sont automatiquement échappés vers leurs équivalents Unicode. Cependant, il peut y avoir des cas où vous souhaitez que ces caractères soient conservés dans leur forme originale.
Énoncé du problème
Considérez le programme Go suivant :
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)) }
Sortie :
Before Marshal {<car><mirror>XML</mirror></car>} After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
Comme vous pouvez le voir, le "<" et ">" les caractères ont été échappés respectivement en "u003c" et "u003e".
Solution
Depuis Go 1.7, json.Marshal ne fournit pas d'option pour désactiver l'échappement HTML . Cependant, il existe une solution de contournement en utilisant une fonction personnalisée :
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 appelant cette fonction au lieu de json.Marshal, vous pouvez empêcher l'échappement de "<" et ">".
Sortie :
{"xmlRequest":"<car><mirror>XML</mirror></car>"}
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!