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
相关产品推荐
相关产品推荐

