首页 > 其他分享 >golang json库 忽略 omitempty

golang json库 忽略 omitempty

时间:2024-06-19 15:59:31浏览次数:24  
标签:忽略 omitempty golang json tag 序列化

json库的obmitempty介绍

众所周知,golang的json库 有个 omitempty的tag ,有了它,这个json序列化的时候,如果这个字段是零值,则会忽略此字段的序列化,导致json字符串中没有对应的字符串。
这对于某些人是困惑的,一般默认是没有 omitempty 这个tag的,但是。 但是来了,但是protobuf 生成的pb.go 里面带有的jsontag 就默认是有omitempty的。
比如:

type HelloReply struct {
    Message string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"`
}

如果Message=="" 则在序列化以后,你只能看到一个{} 空对象。

如何在json序列化的时候 忽略omitempty,把零值全部序列化呢?

有个简单的办法,就是 你把 encoding/json的库复制一份到你的项目目录,然后把这个目录改名为 xxx/internal/jsonNoOmitempty ,然后 搜索这个裤子里面的omitempty,把相关代码都注释掉,
后续使用jsonNoOmitempty.Marshal(xxx) 即可获得 忽略omitempty的json结果.

标签:忽略,omitempty,golang,json,tag,序列化
From: https://www.cnblogs.com/ayanmw/p/18256442

相关文章

  • SpringBoot整合JWT(JSON Web Token)生成token与验证
    目录JWT什么是JWTJWT使用流程确定要传递的信息:生成JWT:JWT传输:客户端保存JWT:客户端发送JWT:服务器验证JWT:服务器响应:Token的使用示例:工具类R结果集返回一个生成的token创建拦截器JWT什么是JWTJWT(JSONWebToken)是是目前最流行的跨域认证解决方案。它通常被......
  • kettle从入门到精通 第七十一课 ETL之kettle 再谈http post,轻松掌握body中传递json参
    场景:kettle中httppost步骤如何发送http请求且传递body参数? 解决方案:httppost步骤中直接设置Requestentityfield字段即可。1、手边没有现成的post接口,索性用python搭建一个简单的接口,关键代码如下(安装python环境略):fromflaskimportFlask,request,jsonifyapp=Fl......
  • Golang与设计模式
    单例模式因为之前研究Java比较多,所以当我试着使用go来实现一些设计模式的时候,首先想到的就是照搬Java中的思路,后面对go了解加深之后又增加了一些新的思路。在Java中实现的单例模式的思路有很多,但是比较好的两个思路是利用类加载机制生成单例对象,check-lock-check机制避免并发问......
  • Golang语言基础超详细教程&备忘录
    作者的话:这篇文章是之前刚从Java转到Go,学习时编写的,力求全面且详细。本文是基础内容,适合初学者,也适合老手用来当备忘录。和网上其他文档不同的是,我陆陆续续将很多小的知识点也补进来了,后续也会继续补充。这篇文章开始是我写在本机,然后又改写到自己的个人博客,现在有誊写到CSDN,......
  • pydantic+openai+json: 控制大模型输出的最佳范式
    调用大模型已经是如今做ai项目习以为常的工作的,但是大模型的输出很多时候是不可控的,我们又需要使用大模型去做各种下游任务,实现可控可解析的输出。我们探索了一种和python开发可以紧密合作的开发方法。所有的代码都开源在了GitHub大模型输出是按照token逐个预测然后解码成......
  • golang中用chan实现迭代器
    实现代码如下:packagemainimport( "log" "time")/* 两种迭代器的实现*///采用index的方式实现(非线程安全)typeListStructstruct{ indexint data[]int}func(sl*ListStruct)Next()int{ d:=sl.data[sl.index] sl.index+=1 returnd}func(......
  • JSON响应中提取特定的信息——6.14山大软院项目实训2
    在收到的JSON响应中提取特定的信息(如response字段中的文本)并进行输出,需要进行JSON解析。在Unity中,可以使用JsonUtility进行简单的解析,但由于JsonUtility对嵌套对象的支持有限,通常推荐使用第三方库如Newtonsoft.Json来处理复杂的JSON结构。首先,确保Unity项目中已经包含了Newton......
  • 由心知天气服务器响应的实时天气数据并进行JSON解析
    由心知天气服务器响应的实时天气数据并进行JSON解析#include<netinet/in.h>#include<arpa/inet.h>#include<stdio.h>#include<errno.h>#include<sys/socket.h>#include<netinet/in.h>#include<netinet/ip.h>#include<arpa/inet.h>......
  • rust 和 golang 的特点及适用场景
     Rust特点及适用场景:内存安全:Rust通过所有权系统和生命周期管理在编译时保证内存安全,有效防止了空指针异常、数据竞争、悬挂指针等问题,非常适合开发高性能系统软件和底层库。并发模型:Rust提供了强大的并发工具,如async/await和通道(channel),支持高效且安全......
  • golang flag 包
    Go语言的flag包用于命令行参数的解析。你可以通过定义参数来使用它。以下是一些使用flag包的常见方法:使用flag.String()定义一个字符串参数。使用flag.Int()定义一个整数参数。使用flag.Parse()解析命令行参数。使用flag.Args()获取未解析的参数。以下是一个简单的示例,演......