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
Libérer: 2024-12-16 08:41:13
original
228 Les gens l'ont consulté

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))
}
Copier après la connexion

Sortie :

Before Marshal {<car><mirror>XML</mirror></car>}
After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
Copier après la connexion

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
}
Copier après la connexion

En appelant cette fonction au lieu de json.Marshal, vous pouvez empêcher l'échappement de "<" et ">".

Sortie :

{"xmlRequest":"<car><mirror>XML</mirror></car>"}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal