首頁 >後端開發 >Golang >如何防止 JSON Marshal 在 Go 中轉義尖括號和 & 符號?

如何防止 JSON Marshal 在 Go 中轉義尖括號和 & 符號?

Patricia Arquette
Patricia Arquette原創
2024-12-10 14:25:11254瀏覽

How to Prevent JSON Marshal from Escaping Angle Brackets and Ampersands in Go?

JSON Marshal 中轉義尖括號和& 符號

問題

Go 中,json.Marshal 括號 自動轉義尖號(

考慮以下範例:

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))
}

此程式碼將列印以下輸出:

Before Marshal {xmlRequest:<car><mirror>XML</mirror></car>}
After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}

注意XML 請求字串中的尖括號和& 符號在JSON 中進行轉義

在Go 1.7之前,無法阻止 json.Marshal 轉義這些字元。不過,現在有一個解決方法:

func (t *Track) JSON() ([]byte, error) {
    buffer := &bytes.Buffer{}
    encoder := json.NewEncoder(buffer)
    encoder.SetEscapeHTML(false)
    err := encoder.Encode(t)
    return buffer.Bytes(), err
}

該函數首先建立一個位元組緩衝區和一個 JSON 編碼器。然後,它將 EscapeHTML 選項設為 false,以防止編碼器轉義 HTML 字符,包括尖括號和與號。

如果您想將此解決方案應用於您自己的自訂類型,請將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
}

現在,您可以使用JSONMarshal 來編組任何自訂類型並防止尖括號和& 符號。

以上是如何防止 JSON Marshal 在 Go 中轉義尖括號和 & 符號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn