演示omitempty 代码:

package main

import (
"encoding/json"
"fmt"
) func main() {
type Hobby struct {
Movie string `json:"movie,omitempty" bson:"movie"`
BasketballTeam string `json:"basketball_team,omitempty" bson:"basketball_team"`
} type Person struct {
Name string `json:"name,omitempty" bson:"name"`
Level int `json:"level,omitempty" bson:"level"`
Hobby Hobby `json:"hobby,omitempty" bson:"hobby"`
} var coder Person
var level int = 0
coder.Level = level
coder.Name = "mike"
bytes, _ := json.Marshal(coder)
fmt.Printf("%s\n", string(bytes))
// 打印为:{"name":"mike","hobby":{}}
return }

我们发现给Level 字段赋值了0,但是json字符串化后打印, level字段没有了。反而是没有赋值的Hobby字段出现了。当实际应用时level可以为0,而Hobby 如果没有赋值时字符串中不需要出现。 如何解决情况?

示例代码:

package main

import (
"encoding/json"
"fmt"
) func main() {
type Hobby struct {
Movie string `json:"movie,omitempty" bson:"movie"`
BasketballTeam string `json:"basketball_team,omitempty" bson:"basketball_team"`
} type Person struct {
Name string `json:"name,omitempty" bson:"name"`
Level *int `json:"level,omitempty" bson:"level"`
Hobby *Hobby `json:"hobby,omitempty" bson:"hobby"`
} var coder Person
var level int = 0
coder.Level = &level
coder.Name = "mike"
bytes, _ := json.Marshal(coder)
fmt.Printf("%s\n", string(bytes))
// 打印 {"name":"mike","level":0}
return }

指定 Level 、Hobby 引用类型后问题就可以了。

golang json化时允许赋予默认值的更多相关文章

  1. java 反射: 当Timestamp类型的属性值为null时,设置默认值

    import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  2. 简写代码:当变量为false时['',false,null,undefined,0,NaN]时,返回默认值

    当变量为'',false,null,undefined,0,NaN时,返回默认值 var a='' a || 'hello world'   "hello world" var a ...

  3. hibernate 插入数据时让数据库默认值生效

    用hibernate做数据库插入操作时,在数据库端已经设置了对应列的默认值,但插入的数据一直为null.查找资料发现,原来是hibernate的配置项在作怪. Hibernate允许我们在映射文件里控 ...

  4. Python中定义函数时参数有默认值的小陷阱

    在定义函数的时候,如果函数的参数有默认值,有两种类型的参数,一种是整数,字符串这种不可变类型,另一种是列表这种可变类型,对于第一种情况没有什么特殊的地方,但是对于可变类型,有一个微妙的小陷阱. 可变类 ...

  5. java字符串转换数值类型出现异常赋予默认值

    http://blog.csdn.net/w47_csdn/article/details/77855126 可以自定义工具方法,例如: public static int parseInt(Stri ...

  6. Jackson将对象转换为json字符串时,设置默认的时间格式

    maven需要的依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifac ...

  7. C#里XML(JSON)序列化时,自动隐藏值为Null的成员的输出

    从StackOverflow里找到的答案.发现对最新的Newtownsoft的JSON序列化也同样适用. https://stackoverflow.com/questions/5818513/xml ...

  8. 66、fastJson 解析json数据时,如果key值不同怎么处理?

    在某些场景,你可能需要定制序列化输出,比如说,希望序列化采用之后采用"ID",而不是"id",你可以使用@JSONField这个Annotation. publ ...

  9. jackson set properties to default value (取消让jackson 赋予默认值)

    you can define it with Integer rather than int or long. define it with a package type. jackson wont' ...

  10. JS 保存表单默认值 为空时自动填充默认值

    var inputArray = document.getElementsByTagName("input"); var strArray = []; ; i < input ...

随机推荐

  1. plc扫描周期

  2. js判断图片链接是否有效

    let checkImgExists = function(url) { return new Promise(function(resolve, reject) { let ImgObj = new ...

  3. Python全栈学习笔记---问题总结(五)

    一.全局变量和局部变量 在函数内声明全局变量:globle 二.数值型lis和字符型list转换 数值型list转字符型list 3.x: array = [1, 2, 3, 4, 5,6 ] arr ...

  4. ts get和set

    class User { // get.set方法的成员变量命名时建议在前面加 _ private _fullName: string; //get 的用法 get fullName(): strin ...

  5. 使用Promethues和Grafana监控Flink

    之前使用Influxdb储存Metrics经常会出现数据写不进去的问题,当Influxdb重启之后又能写进去,遂将数据存储部分换成Promethues,因为Flink采用PutGateway的方式,需 ...

  6. 【azw3】麻省理工深度思考法:从模型及动力机制来思考现象

    书本详情 标题:麻省理工深度思考法:从模型及动力机制来思考现象作者:[日]平井孝志 著:张玉虹 译年份:2018出版社:北京:中国华侨出版社ISBN:9787511373441,7511373445格 ...

  7. 发生错误:请确认您的电脑是否安装了excel软件,并且您的浏览器是否允许远行excel!具体操作请查阅帮助.

    1.要先下载 activeX 这个控件 2.进入internet选项--->安全--->将安全级别调到最低 3,是否下载了excel. 4,关闭window防火墙

  8. 如何为 Debian 11 安装图形用户界面 (GUI)

    如何为 Debian 11 安装图形用户界面 (GUI) allway2 于 2021-12-26 17:30:14 发布 11767 收藏 23文章标签: debian 服务器 linux版权 华为 ...

  9. char 与 string 互转 byte与string互转 list<string>与string[]互转 char与byte互转

    class Program    {        static void Main(string[] args)        {                                   ...

  10. hbase修改表TTL

    创建表时可以指定TTL create 'test_lwt',{NAME=>'d',TTL=>3600}  设置test_lwt表数据TTL为3600秒 修改已存在的表TTL disable ...