「<」の JSON エスケープの防止そして「>」 with json.Marshal
json.Marshal を使用して構造体を JSON に変換する場合、「<」などの特殊文字は使用できません。そして「>」は自動的に対応する Unicode にエスケープされます。ただし、これらの文字を元の形式で保存したい場合もあります。
問題ステートメント
次の Go プログラムを考えてみましょう:
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)) }<p>出力:</p> <pre class="brush:php;toolbar:false">Before Marshal {<car><mirror>XML</mirror></car>} After marshal {"xmlRequest":"\u003ccar\u003e\u003cmirror\u003eXML\u003c/mirror\u003e\u003c/car\u003e"}
ご覧のとおり、「<」そして「>」文字はそれぞれ「u003c」と「u003e」にエスケープされています。
解決策
Go 1.7 の時点では、json.Marshal には HTML エスケープを無効にするオプションがありません。 。ただし、カスタム関数を使用した回避策があります。
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.Marshal の代わりにこの関数を呼び出すことで、「<」のエスケープを防ぐことができます。
出力:
{"xmlRequest":"<car><mirror>XML</mirror></car>"}
以上がGo の `json.Marshal` での '' の JSON エスケープを防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。