Go json omitempty如何实现可选属性

 更新时间:2024年09月17日 09:38:03   作者:wecode66  
在Go语言中,使用`omitempty`可以帮助我们在进行JSON序列化和反序列化时,忽略结构体中的零值或空值,本文介绍了如何通过将字段类型改为指针类型,并在结构体的JSON标签中添加`omitempty`来实现这一功能,例如,将float32修改为*float32

Go json omitempty实现可选属性

有以下 json 字符串

{
	"width":256,
	"height":256,
	"size":1024
	"url":"wecode.fun/bucket/photo/a.jpg",
	"type":"JPG"
}

对应 go 的结构体

type MediaSummary struct {
	Width    int      `json:"width"`
	Height   int      `json:"height"`
	Size     int      `json:"size"`
	URL      string   `json:"url"`
	Type     string   `json:"type"`
	Duration float32 `json:"duration"` 
}

反序列化后,得到的 json 结构是

{
	"width":256,
	"height":256,
	"size":1024
	"url":"wecode.fun/bucket/photo/a.jpg",
	"type":"JPG",
	"duration":0.0
}

这里的 “duration”:0.0 并不是我们需要的。

要去掉这个,可以借助 omitempty 属性。

即:

type MediaSummary struct {
	Width    int      `json:"width"`
	Height   int      `json:"height"`
	Size     int      `json:"size"`
	URL      string   `json:"url"`
	Type     string   `json:"type"`
	Duration *float32 `json:"duration,omitempty"` 
}

注意,上述有定义2个改动:

  • 1、duration 添加了 omitempty
  • 2、float32 修改为 指针类型 *float32

这样做的原因可以参考链接:

Golang 的 “omitempty” 关键字略解

上述修改后,反序列化的结果是:

{
	"width":256,
	"height":256,
	"size":1024
	"url":"wecode.fun/bucket/photo/a.jpg",
	"type":"JPG"
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • GO语言make和new关键字的区别

    GO语言make和new关键字的区别

    本篇文章来介绍一道非常常见的面试题,到底有多常见呢?可能很多面试的开场白就是由此开始的。那就是 new 和 make 这两个内置函数的区别,希望对大家有所帮助
    2023-04-04
  • Go语言使用字符串的几个技巧分享

    Go语言使用字符串的几个技巧分享

    这篇文章中小编将给出一些Go语言在处理字符串方面的技巧,对大家学习Go语言具有一定的参考借鉴价值,下面一起看看吧。
    2016-09-09
  • golang在GRPC中设置client的超时时间

    golang在GRPC中设置client的超时时间

    这篇文章主要介绍了golang在GRPC中设置client的超时时间,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go routine调度详解

    Go routine调度详解

    这篇文章主要介绍了Go routine调度详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Go语言Handler详细说明

    Go语言Handler详细说明

    这篇文章主要介绍了Go语言Handler详细说明,Handler用于处理请求并给予响应。更严格地说,用来读取请求体、并将请求对应的响应字段(respones header)写入ResponseWriter中,需要的朋友可以参考下
    2022-04-04
  • 在golang xorm中使用postgresql的json,array类型的操作

    在golang xorm中使用postgresql的json,array类型的操作

    这篇文章主要介绍了在golang xorm中使用postgresql的json,array类型的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go Web开发之Gin多服务配置及优雅关闭平滑重启实现方法

    Go Web开发之Gin多服务配置及优雅关闭平滑重启实现方法

    这篇文章主要为大家介绍了Go Web开发之Gin多服务配置及优雅关闭平滑重启实现方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Go语言break跳转语句怎么使用

    Go语言break跳转语句怎么使用

    这篇文章主要介绍了Go语言break跳转语句怎么使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • Go实现双向链表的示例代码

    Go实现双向链表的示例代码

    这篇文章主要介绍了Go实现双向链表的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 重学Go语言之如何使用Modules

    重学Go语言之如何使用Modules

    Go语言在Go.1.11版本发布了Go Modules,这是一种新的Go项目依赖管理解决方案,可以让Go项目的依赖包关系更加清晰,也更容易管理,下面就来看看Modules是如何使用的吧
    2023-07-07

最新评论