热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golang中json的omitempty使用操作

这篇文章主要介绍了golang中json的omitempty使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,大家还是直接看代码吧~

package main
import (
"encoding/json"
"fmt"
)

type Project struct {
 Name string `json:"name"`
 Url string `json:"url"`
 Docs string `json:"docs,omitempty"`
}

func main() {
 p1 := Project{
 Name:"hello name",
 Url:"https://blog.csdn.net/qq_30505673",
 }

 data, err := json.Marshal(p1)
 if err != nil {
 panic(err)
 }

 // Docs定义为omitempty所以不会出现Docs的字段
 fmt.Printf("%s\n", data)

 p2 := Project{
 Name:"lovego",
 Url:"https://blog.csdn.net/qq_30505673",
 Docs:"https://blog.csdn.net/qq_30505673",
 }

 data2, err := json.Marshal(p2)
 if err != nil {
 panic(err)
 }

 //打印出所有的字段
 fmt.Printf("%s\n", data2)
}

如果没有omitempty,该字段是会显示的。

补充:golang omitempty实现嵌套结构体的省略输出

golang在处理json转换时,对于标签omitempty定义的field,如果给它赋得值恰好等于空值(比如:false、0、""、nil指针、nil接口、长度为0的数组、切片、映射),则在转为json之后不会输出这个field。

那么,针对结构体中嵌套结构体,如果嵌套结构体为空,是否也会忽略?如果要忽略空结构体输出,怎么处理?

情况一:匿名结构体:使用omitempty修饰该匿名结构体中的字段,那么当为空时不会输出

type Book struct{
 Name string `json:"name"`
 Price float32 `json:"price"`
 Desc string `json:"desc,omitempty"`
 Author //匿名结构体
}
type Author struct {
 Gender int `json:"gender,omitempty"`
 Age int `json:"age,omitempty"`
}
 
func main() {
 var book Book
 book.Name = "testBook"
 bookByte,_:=json.Marshal(book)
 fmt.Printf("%s\n", string(bookByte))
}

输出:

{"name":"testBook","price":0}

情况二:非匿名结构体

type Book struct{
 Name string `json:"name"`
 Price float32 `json:"price"`
 Desc string `json:"desc,omitempty"`
 Author Author `json:"author,omitempty"`
}
type Author struct {
 Gender int `json:"gender,omitempty"`
 Age int `json:"age,omitempty"`
}
 
func main() {
 var book Book
 book.Name = "testBook"
 bookByte,_:=json.Marshal(book)
 fmt.Printf("%s\n", string(bookByte))
}

输出:

{"name":"testBook","price":0,"author":{}}

可以发现,没有给嵌套结构体赋值时,会打印该嵌套结构体的空结构体。这是因为该空结构体不属于omitempty能识别的空值(false、0、""、nil指针、nil接口、长度为0的数组、切片、映射)。但若期望该嵌套结构体的空结构体也不会输出,可以通过指针实现。

type Book struct{
 Name string `json:"name"`
 Price float32 `json:"price"`
 Desc string `json:"desc,omitempty"`
 Author *Author `json:"author,omitempty"`
}
type Author struct {
 Gender int `json:"gender"`
 Age int `json:"age"`
}
 
func main() {
 var book Book
 book.Name = "testBook"
 bookByte,_:=json.Marshal(book)
 fmt.Printf("%s\n", string(bookByte))
}

输出:

{"name":"testBook","price":0}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。


推荐阅读
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • golang 解析磁力链为 torrent 相关的信息
    其实通过http请求已经获得了种子的信息了,但是传播存储种子好像是违法的,所以就存储些描述信息吧。之前python跑的太慢了。这个go并发不知道写的有没有问题?!packag ... [详细]
  • 看到平台银行对接方案写的demo确实还不错记个笔记互相学习学习packageapiimport(cryptotlsnetnethttpstringssynct ... [详细]
  • 目录在Go语言项目中使用Zap日志库介绍默认的GoLogger日志库实现GoLogger设置Logger使用LoggerLogger的运行GoLogger的优势和劣势优势劣势Ube ... [详细]
  • Go冒泡排序练习
    package main要求:随机生成5个元素的数组,并使用冒泡排序对其排序  从小到大思路分析:随机数用mathrand生成为了更好 ... [详细]
  • Go 快速入门指南命令行参数
    命令行参数个数调用os包即可。获取参数个数,遍历参数packagemainimport(fmtos)funcmain(){fmt.Printf(Numberofargsi ... [详细]
  • 集成第三方库,自检测读取配置文件。文件读取,结构体定义,接口实现,错误返回,库解析,适合新同学练手。思路文件读取获取字节流文件类型分析,确定解析api集成第三方解析api管理器定义 ... [详细]
  • 小编给大家分享一下Golang端口复用测试的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 数组的排序:数组本身有Arrays类中的sort()方法,这里写几种常见的排序方法。(1)冒泡排序法publicstaticvoidmain(String[]args ... [详细]
author-avatar
天使的泪无人知晓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有