栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 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号