我就废话不多说了,大家还是直接看代码吧~
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}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 群星《群星歌曲合集》[320K/MP3][11.8G][精选经典]
- 欢子.2009-得到你的人却得不到你的心【孔雀唱片】【WAV+CUE】
- NANA(纳纳)《Father(父親)》专辑[FLAC+CUE]
- 原声大碟《速度与激情8》flac
- 李梦瑶2024《唯一》HQCD头版限量编号[低速原抓WAV+CUE]
- 苏慧伦.1995-满足【滚石】【WAV+CUE】
- 任贤齐.1999-认真精选辑2CD【滚石】【WAV+CUE】
- 群星《群星歌曲合集》[320K/MP3][3.6G]
- 凤凰传奇《凤凰传奇歌曲合集》[320K/MP3][821.3MB]
- 费玉清《费玉清歌曲合集》[320K/MP3][96.9MB]
- 张琍敏1987-名曲精选21首[日本索尼版][WAV+CUE]
- 张敬轩.2011-P.S.ILoveYou(新歌+精选)【环球】【FLAC+CUE】
- 张敬轩.2013-是时候....(新曲+精选)3CD【环球】【WAV+CUE】
- 群星《群星歌曲合集》[320K/MP3][2.7G]
- 萧敬腾《萧敬腾歌曲合集》[320K/MP3][220.1MB]