• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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}

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

    您可能感兴趣的文章:
    • golang json数组拼接的实例
    • 在golang xorm中使用postgresql的json,array类型的操作
    • golang中json小谈之字符串转浮点数的操作
    • golang 实现json类型不确定时的转换
    • golang:json 反序列化的[]和nil操作
    • 解决Golang json序列化字符串时多了\的情况
    • golang中json和struct的使用说明
    上一篇:go语言 全局变量和局部变量实例
    下一篇:Golang::slice和nil的对比分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang中json的omitempty使用操作 golang,中,json,的,omitempty,