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

Go语言中忽略omitempty标签序列化结构体为含空值JSON的方法

Go结构体序列化时忽略omitempty标签输出全字段

我定义了如下Go结构体:

type Foo struct {
  A string `json:",omitemtpy"`
}

注:代码中omitemtpy应为笔误,正确的JSON标签为omitempty

使用json.Marshal(Foo{})序列化该结构体时会返回空JSON字符串,但实际场景中我使用的是大型结构体,无法创建不带omitempty标签的副本,因此需要基于原结构体生成包含所有字段及对应空值的JSON,也就是序列化时忽略omitempty标签的过滤规则。

此JSON生成无需追求性能,优先考虑使用现成库,但多数库要么生成特殊格式要么仍遵循omitempty规则,无法满足需求。


实现方案

我参考了相关解决方案并补充了默认值设置逻辑,具体代码如下:

defaultFoo := FoodWithPts{ Str: "helloWorld"}
dupFooType := dupType(reflect.TypeOf(defaultFoo))
foo := reflect.Zero(dupFooType).Interface()

// 新增默认值覆盖逻辑
defaults, _ := json.Marshal(defaultFoo)
json.Unmarshal(defaults, &foo)   // 用默认值覆盖空结构体实例
// 逻辑结束

data, err := json.Marshal(foo)
fmt.Println("dup FooWithPtrs:\n", string(data), err)

输出结果

dup FooWithPtrs:
    {"String":"helloWorld","Int":0,"Bar":null} <nil>

内容的提问来源于stack exchange,提问作者dtracers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:50:01