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"
}

总结

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

相关文章

  • win7下配置GO语言环境 + eclipse配置GO开发

    win7下配置GO语言环境 + eclipse配置GO开发

    这篇文章主要介绍了win7下配置GO语言环境 + eclipse配置GO开发,需要的朋友可以参考下
    2014-10-10
  • Golang中List的实现方法示例详解

    Golang中List的实现方法示例详解

    最近决定复习下Go,所以下面这篇文章主要给大家介绍了关于Golang中List的实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • Go语言内建函数cap的实现示例

    Go语言内建函数cap的实现示例

    cap 是一个常用的内建函数,它用于获取某些数据结构的容量,本文主要介绍了Go语言内建函数cap的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Golang实现CronJob(定时任务)的方法详解

    Golang实现CronJob(定时任务)的方法详解

    这篇文章主要为大家详细介绍了Golang如何通过一个单 pod 去实现一个常驻服务,去跑定时任务(CronJob),文中的示例代码讲解详细,需要的可以参考下
    2023-04-04
  • Golang::slice和nil的对比分析

    Golang::slice和nil的对比分析

    这篇文章主要介绍了Golang::slice和nil的对比分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • go语言实现sftp包上传文件和文件夹到远程服务器操作

    go语言实现sftp包上传文件和文件夹到远程服务器操作

    这篇文章主要介绍了go语言实现sftp包上传文件和文件夹到远程服务器操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go实现socks5服务器的方法

    Go实现socks5服务器的方法

    SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全,这篇文章主要介绍了Go实现socks5服务器的方法,需要的朋友可以参考下
    2023-07-07
  • Go语言连接Oracle数据库的方法

    Go语言连接Oracle数据库的方法

    这篇文章主要介绍了Go语言连接Oracle数据库的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • go语言区块链学习调用智能合约

    go语言区块链学习调用智能合约

    这篇文章主要为大家介绍了go语言区块链学习中如何调用智能合约的实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • Go语言基于viper实现apollo多实例快速

    Go语言基于viper实现apollo多实例快速

    viper是适用于go应用程序的配置解决方案,这款配置管理神器,支持多种类型、开箱即用、极易上手。本文主要介绍了如何基于viper实现apollo多实例快速接入,感兴趣的可以了解一下
    2023-01-01

最新评论