golang json omitempty是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang json omitempty是啥意思相关的知识,希望对你有一定的参考价值。

为空则不输出

比如:

packagemain

导入(

“编码/json”

“FMT”

项目结构类型{

Name字符串'json:"Name"'

Url字符串'json:'"Url"

json:"Docs,omitempty'"

函数main(){

P1:Project={

名称:“CleverGo高性能框架”

Url:“https://github.com/headwindfly/clevergo”,

err:=json。元帅(p1)

如果犯错!=nil{

恐慌(err)

//P1没有DU给Docs赋值,所以当zhi打印出来的时候,Docs的字段不会出现

FMT。Printf("%s\n",data)

P2:Project={

名称:“CleverGo高性能框架”

Url:“https://github.com/headwindfly/clevergo”,

医生:“https://github.com/headwindfly/clevergo/tree/master/docs”,

Data2,err:=json。元帅(p2)

如果犯错!=nil{

恐慌(err)

//P2将打印dao并打印所有

FMT。Printf("%s\n",data2)

扩展资料:

注意事项:

system.out。println将在输出之前计算传递的参数,然后调用操作结果对象的toString()方法,即在输出之前将操作结果转换为字符串。

例如如果您编写System。出去了。Println(a+b+c),这个程序实际上是ABC先做了“加法”操作,如果ABC是int,那么“together”就是sum,所以是System。

println(a+b+c)输出是ABC的总和的字符串,如果a=1,b=2,c=3的输出是6,但如果ABC不是int,但其他类型的数据,所以“在一起”的意思是关于如何定义这种类型的对象,如果它是一个字符串,然后“添加”意味着“连接”。

参考技术A

为空则不输出


比如:

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:"CleverGo高性能框架",
              Url:"https://github.com/headwindfly/clevergo",
       

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

       // p1 没有为Docs赋值,这里打印出来不会出现Docs的字段
       fmt.Printf("%s\\n", data)

       p2 := Project
              Name:"CleverGo高性能框架",
              Url:"https://github.com/headwindfly/clevergo",
              Docs:"https://github.com/headwindfly/clevergo/tree/master/docs",
       

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

       // p2 则会打印所有
       fmt.Printf("%s\\n", data2)

本回答被提问者和网友采纳
参考技术B “将内容marshal成[]byte时,对标记有omitempyt的值加以判断,如果为空,则忽略该值(即空值不会出现在结果数组中)。”
这只是在marshal的时候才有效的标记,因为在decode源码中找不到它。 (^_^)

golang:omitempty用法


在struct转json时,omitempty字段的值如果是该字段类型的零值,则忽略该字段。


例:

package main

import "fmt"
import "encoding/json"

type User struct {
	Name string `json:"name"`
	Age  int    `json:"age,omitempty"`
}

func main() {
	u := User{
		Name: "abc",
		Age:  10,
	}
	bytes, _ := json.Marshal(&u)
	fmt.Println(string(bytes))

	//

	u = User{
		Name: "def",
	}
	bytes, _ = json.Marshal(&u)
	fmt.Println(string(bytes))
}

执行结果:

{"name":"abc","age":10}
{"name":"def"}

以上是关于golang json omitempty是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Golang 中导入本地包

golang 定义结构一次,在另一个结构定义中使用

Golang + MongoDB 嵌入类型(将一个结构嵌入到另一个结构中)

golang里的json marshal && unmarshal

无法使用带有 golang 的 mgo 检索“_id”值

Protocol Buffer 去除 json omitempty