You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:15:03