登录
首页 >  Golang >  Go问答

使用 null 而非空字符串对 JSON 字段进行赋值

来源:stackoverflow

时间:2024-02-29 16:54:25 351浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《使用 null 而非空字符串对 JSON 字段进行赋值》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

由于空字符串是 go string 的零/默认值,因此我决定将所有此类字段定义为 interface{}。例如

type student struct {
    FirstName  interface{} `json:"first_name"`
    MiddleName interface{} `json:"middle_name"`
    LastName   interface{} `json:"last_name"`
}

如果该特定字段的值不可用,我发送数据的应用程序需要 null 而不是空字符串。

这是正确的方法吗?或者有人可以给我指出比这更好的方法吗?


解决方案


json package documentation 中:

指针值编码为指向的值。 nil 指针编码为 null json 对象。

因此,您可以存储一个指向字符串的指针,如果不为 nil,则该字符串将被编码为字符串;如果为 nil,则该字符串将被编码为“null”

type student struct {
  firstname  *string `json:"first_name"`
  middlename *string `json:"middle_name"`
  lastname   *string `json:"last_name"`
}

对于带有空字符串的 json 对象的情况,最简单的方法是在字段上使用 omitempty 装饰器。

type student struct {
  FirstName  string `json:"first_name,omitempty"`
  MiddleName string `json:"middle_name,omitempty"`
  LastName   string `json:"last_name"`
}

通过上述声明,仅当分配了first_name时,该键才会显示在结果json中。另一方面,如果未分配,last_name 将始终显示在结果中,且值为“”。

现在,当您开始包含 0 可能是一个值的数字字段时,使用 omitempty 不会达到人们所期望的效果。 0 值总是会删除该字段,我们需要能够区分 0 值和未分配的值。这里建议使用 https://github.com/guregu/null 等库。

更多讨论请点击:https://www.sohamkamani.com/blog/golang/2018-07-19-golang-omitempty/

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《使用 null 而非空字符串对 JSON 字段进行赋值》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>