栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Go中使用非必需的JSON参数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Go中使用非必需的JSON参数?

从JSON文本解组值时,

json
程序包不需要所有字段都以JSON形式出现,也不需要所有JSON字段都具有匹配的Go字段。

因此,您没有什么特别的事情要做,只需解组您必须拥有的东西,以获取您想要或可能想要的价值。

需要注意的一件事是,如果JSON文本中缺少字段,则

json
包将不会更改相应的Go字段,因此,如果您以“
fresh”(零)开头,则该字段将保留其零值。类型。

在大多数情况下,这足以检测字段的存在或不存在(在JSON中),例如,如果在Go
struct中您有一个

SortBy
类型的字段
string
,如果在JSON中缺少此字段,则它将保持为空
string
:
""
。

如果零值有用且有效,那么您可以转向使用指针。例如,如果在您的应用程序中,empty

string
为有效值
SortBy
,则可以将该字段声明为指针:
*string
。并且在这种情况下,如果JSON文本中缺少
nil
该值,则它将保留为任何指针类型的零值。

请参阅以下示例:

type Data struct {    I int    S string    P *string}func main() {    var d Data    var err error    d, err = Data{}, nil    err = json.Unmarshal([]byte(`{"I":1, "S":"sv", "P":"pv"}`), &d)    fmt.Printf("%#v %vn", d, err)    d, err = Data{}, nil    err = json.Unmarshal([]byte(`{"I":1}`), &d)    fmt.Printf("%#v %vn", d, err)    d, err = Data{}, nil    err = json.Unmarshal([]byte(`{"S":"abc"}`), &d)    fmt.Printf("%#v %vn", d, err)}

输出(在Go Playground上尝试):

main.Data{I:1, S:"sv", P:(*string)(0x1050a150)} <nil>main.Data{I:1, S:"", P:(*string)(nil)} <nil>main.Data{I:0, S:"abc", P:(*string)(nil)} <nil>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/440295.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号