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

如何查看Go结构体对应的JSON标签键?Marshal相关问题咨询

Go JSON序列化问题排查与解决

问题1:调用foo.Marshal(data)输出结构体实例而非JSON字符串

出现该问题的核心原因及排查方向如下:

  • 结构体字段未导出:Go的序列化工具(包括encoding/json)仅能处理首字母大写的导出字段。若你的结构体字段为小写(比如intValue写成intvalue),即便添加了JSON标签也会被忽略,此时若调用的不是标准JSON序列化方法,就会直接输出结构体实例信息。
  • 误用Marshal方法:你代码中的foo.Marshal大概率不是encoding/json包的标准Marshal函数。确认导入语句为import "encoding/json",且调用的是json.Marshal(data),而非自定义或其他第三方包的Marshal方法。
  • JSON标签格式错误:检查结构体字段标签的写法,正确格式为json:"目标字段名",示例:
    type MyData struct {
        IntValue  int    `json:"intValue"`
        BoolValue bool   `json:"boolValue"`
        StrValue  string `json:"strValue"`
    }
    
    注意标签内不要包含多余空格或无效符号。

问题2:fmt.Println(string(json.Marshal(data)))触发错误

这是典型的语法错误:json.Marshal会返回两个值——[]byte类型的序列化结果,以及error类型的错误信息。而string()函数仅接受一个参数,直接将两个返回值传入会触发编译报错。

正确写法需先接收两个返回值,处理错误后再转换为字符串输出:

data := MyData{IntValue: 1234, BoolValue: true, StrValue: "test"}
bytes, err := json.Marshal(data)
if err != nil {
    fmt.Printf("JSON序列化失败: %v\n", err)
    return
}
fmt.Println(string(bytes))

内容的提问来源于stack exchange,提问作者Đỗ Như Vỹ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:45:07