golang——json的html标签转义问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang——json的html标签转义问题相关的知识,希望对你有一定的参考价值。

参考技术A json的Marshal 用来对slice,map,struct等结构化类型数据转义成[]byte/string,UnMarshal方法是用来对[]byte/string转义成指定结构的interface。但在处理html标签字符中,会存在转义问题。Marshal方法默认把html标签中的'<', '>' , '&'字符转义成unicode,为强制为有效UTF-8的JSON字符串,用Unicode替换符号替换无效字节。

go doc原文

Marshal的源码

这一行encOptsescapeHTML: true),这里的true导致标签被转义。

针对上述问题,有两种解决办法,第一种是替换上述三个tag,第二种是SetEscapeHtml(false);

输出:

golang中结构体标签在json中的应用

package main

import (
	"encoding/json"
	"fmt"
	"reflect"
)

type Movie struct {
	Title string `json:"title"`
	Year int `json:"year"`
	Price int `json:"rmb"`
	Actors []string `json:"actors"`
}

func main() {
	var movie = Movie{"长津湖", 2021, 54, []string{"吴京", "易烊千玺"}}

	// 编码的过程 结构体---》json
	jsonByte, err := json.Marshal(movie)
	if err != nil {
		fmt.Println("json Marshal error", err.Error())
	} else {
		// 将字节切片转换为字符串
		//fmt.Println(string(jsonByte))
		fmt.Printf("%s\\n", jsonByte)
		fmt.Println(reflect.TypeOf(jsonByte))
	}

	// 解码的过程 json--->结构体
	var movie2 Movie
	json.Unmarshal(jsonByte, &movie2)
	fmt.Println(movie2)
	fmt.Println(reflect.TypeOf(movie2))

}

  

以上是关于golang——json的html标签转义问题的主要内容,如果未能解决你的问题,请参考以下文章

用作 JSON 时,rails 3 转义的 html 标签在浏览器中未转义

json_encode() 转义 / 带有 \ [重复]

解决json包含html标签无法显示的问题

解决JSON包含HTML标签无法显示的问题

golang json 编码解码

golang学习随便记5