Dans Go, la fonction json.Marshal échappe automatiquement les crochets angulaires (<, > ;) et les esperluettes (&) dans les chaînes. Cependant, cela peut être indésirable dans certaines situations.
Considérons l'exemple suivant :
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>Ce code imprimera le résultat suivant :</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"}
Remarquez que le les crochets angulaires et l'esperluette dans la chaîne de requête XML sont échappés dans le JSON sortie.
Avant Go 1.7, il était impossible d'empêcher json.Marshal d'échapper à ces caractères. Cependant, il existe désormais une solution de contournement :
func (t *Track) JSON() ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Cette fonction crée d'abord un tampon d'octets et un encodeur JSON. Ensuite, il définit l'option EscapeHTML sur false pour empêcher l'encodeur d'échapper aux caractères HTML, y compris les crochets angulaires et les esperluettes.
Si vous souhaitez appliquer cette solution à votre propre type personnalisé, modifiez la fonction JSON() comme suit :
func JSONMarshal(t interface{}) ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buffer.Bytes(), err }
Maintenant, vous pouvez utiliser JSONMarshal pour rassembler n'importe quel type personnalisé et empêcher l'échappement des crochets angulaires et esperluette.
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!