首页 > 其他分享 >Go语言中JSON标签的用法与技巧

Go语言中JSON标签的用法与技巧

时间:2024-08-28 13:53:15浏览次数:7  
标签:struct 标签 json JSON Go type string

在Go语言中,JSON标签(JSON tags)是用来指定结构体字段在序列化为JSON时的名称和行为的。JSON标签通常写在结构体字段的后面,用反引号(`)括起来。以下是一些常用的JSON标签:

  1. json:"field_name":指定JSON对象中的字段名。例如:
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
  1. omitempty:当字段值为空(如零值、空字符串、nil等)时,忽略该字段。例如:
type Person struct {
    Name string `json:"name,omitempty"`
    Age  int    `json:"age,omitempty"`
}
  1. -:忽略该字段,不将其序列化到JSON中。例如:
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"-"`
}
  1. json:",inline":将结构体字段内联到父结构体中,即不生成嵌套的JSON对象。例如:
type Address struct {
    City string `json:"city"`
    State string `json:"state"`
}

type Person struct {
    Name    string  `json:"name"`
    Age     int     `json:"age"`
    Address `json:",inline"`
}
  1. json:",string":将字段值序列化为JSON字符串。例如:
type Person struct {
    Name string `json:"name"`
    Age  int    `json:",string"`
}
  1. json:",number":将字段值序列化为JSON数字。这个标签通常用于float64int64类型的字段。例如:
type Product struct {
    Name  string  `json:"name"`
    Price float64 `json:",number"`
}
  1. json:",bool":将字段值序列化为JSON布尔值。这个标签通常用于bool类型的字段,但在Go中,默认情况下布尔值已经是布尔类型,所以这个标签很少使用。

注意:JSON标签是大小写不敏感的,但在Go中,结构体字段名是大小写敏感的。因此,在使用JSON标签时,请确保它们与结构体字段名匹配。

这些标签可以组合使用,例如:

type Person struct {
    Name    string  `json:"name"`
    Age     int     `json:"age,omitempty,string"`
    Address *Address `json:"address,omitempty"`
}

标签:struct,标签,json,JSON,Go,type,string
From: https://www.cnblogs.com/crazytata/p/18384507

相关文章

  • Django 框架中F和Q的作用
    在Django框架中,F()和Q()是两个非常有用的表达式对象,它们分别用于数据库查询中的字段操作和复杂查询条件的构建。F()F()表达式被用于对数据库中的字段值进行直接操作,而不需要先将它们加载到Python内存中。这在执行数据库级别的更新、删除或过滤操作时特别有用,因为它允许Dj......
  • 109.微软邮箱强制要求使用MS Authenticator手机APP但中国没有GooglePlay的处理办法
    109.微软邮箱强制要求使用MSAuthenticator手机APP但中国没有GooglePlay的处理办法  背景: 微软邮箱强制用户使用它的Authenticator手机验证器APP(只能跳过3次), 而大部分中国用户手机上是没有谷歌框架和GooglePlay的,所以导致很多用户无法使用微软企业邮箱微软自己也发现了......
  • go.uber.org/ratelimit 源码分析
    go.uber.org/ratelimit源码分析go提供了一用来接口限流的包。其中"go.uber.org/ratelimit"包正是基于漏桶算法实现的。使用方式:通过ratelimit.New创建限流器对象,参数为每秒允许的请求数(RPS)。使用Take()方法来获取限流许可,该方法会阻塞请求知道满足限速要求。官方示......
  • Argo Workflow 介绍:一款强大的云原生持续集成工具
    Argoworkflow是什么老牌的CICD工具Jenkins应该是大部分都接触过的,而在云原生时代,诞生了两大CI/CD框架,也就是ArgoWorkflow和Tekton,本文主要介绍一下ArgoWorkflow。ArgoWorkflow是一个云原生的工作流引擎,基于kubernetes来做编排任务,目前Argo项目是CNCF的毕......
  • LightGODE论文阅读笔记
    DoWeReallyNeedGraphConvolutionDuringTraining?LightPost-TrainingGraph-ODEforEfficientRecommendation论文阅读笔记Abstract现存的问题:​ 图卷积网络(GCN)在训练推荐系统(RecSys)中的效率和可扩展性一直是令人担忧的问题,阻碍了它们在现实世界中的应用。提出方法:......
  • Go使用rocketmq实现简单消息
    注意,当前使用的不是grpc协议生产者packagemainimport( "context" "fmt" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/primitive" "github.com/apache/rocketmq-client-go/v2/producer&q......
  • Go使用rocketmq实现延迟消息
    生产者packagemainimport( "context" "fmt" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/primitive" "github.com/apache/rocketmq-client-go/v2/producer" "time&......
  • Go实现大文件分片上传
    index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>uploadfile</title></head><bodyid="app"><h1style="text-align:center"&......
  • C. Turtle and Good Pairs
    https://codeforces.com/contest/2003/problem/C题意:。。。思路:如果要使满足条件的有序对最多,那么首先如果两个字符相等,那么无论如何排列,最终的贡献值都不会变。再看字符不相等的情况,假如有aabbcc,那么abcabc总是优于aabbcc,因为如果一个字符出现了多次,那么像aab,bcc这种就会没......
  • 调整 MongoDB 以适应批量加载
    将几十亿条记录加载到MongoDB中,开始时加载速度还不错,但一段时间后就开始明显放缓。通过观察指标进行了一些研究,发现随着时间的推移,WiredTiger的检查点时间越来越长。检查点时间从最初的几秒到后面的几分钟。在检查点期间,性能基本上是直线下降: WiredTiger检查点从MongoDB......