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标签转义问题的主要内容,如果未能解决你的问题,请参考以下文章