在Golang模板中如何将byte数组转换为string类型?
Go模板中json.RawMessage转字符串的解决方案
场景说明
你拿到的json.RawMessage本质是[]byte类型,模板默认输出字节切片会打印每个字节的十进制值,也就是你看到的[34 102 111 111 34],其中34是双引号的ASCII码,转换为字符串后原始值是带双引号的"foo"。
具体解决方法
1. 转换为带JSON引号的原始字符串
直接使用Go模板内置的string函数即可,语法:
{{ string .MyValue }}
输出结果为:"foo"
2. 转换为无引号的纯文本内容foo
有两种实现方案可选:
方案一:注册自定义模板函数(推荐,兼容性强)
先在Go服务端给模板注册自定义转换函数,支持自动解析JSON内容:
// 导入所需依赖:encoding/json html/template func rawToStr(rm json.RawMessage) (string, error) { var res string err := json.Unmarshal(rm, &res) return res, err } // 注册函数到模板 tpl, err := template.New("your_tpl").Funcs(template.FuncMap{ "rawToStr": rawToStr, }).ParseFiles("your_tpl_path")
之后在模板中直接调用即可:
{{ rawToStr .MyValue }}
输出结果为:foo
该方案支持各种JSON类型的解析,不会因为内容包含引号出现异常。
方案二:内置函数组合(无需修改Go代码,仅适用于纯字符串场景)
如果不方便修改Go代码注册函数,且你确定json.RawMessage存储的是单纯的JSON字符串,可以用trim函数去除两端的双引号:
{{ trim (string .MyValue) `"` }}
注意:该方案仅适用于JSON值为字符串类型的场景,如果
json.RawMessage存储的是数字、对象、数组等类型,会得到错误结果。
内容的提问来源于stack exchange,提问作者user2233706
相关产品推荐
相关产品推荐

