Maison >développement back-end >Golang >Comment empêcher JSON de s'échapper de « » dans « json.Marshal » de Go ?

Comment empêcher JSON de s'échapper de « » dans « json.Marshal » de Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-16 08:41:13133parcourir

How to Prevent JSON Escaping of

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn