登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-19 19:36:41 406浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《如何在 Go 中使用非必需的 JSON 参数?》,这篇文章主要会讲到golang等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

嗨,我正在使用 Go 开发一个 rest API,我希望用户传递 JSON 参数:

Offset int64  `json:"offset"`
Limit  int64  `json:"limit"`
SortBy string `json:"sortby"`
Asc    bool   `json:"asc"`
Username   string `json:"username"`
First_Name string `json:"first_name"`
Last_Name  string `json:"last_name"`
Status     string `json:"status"`

但它们并不总是必需的,因此例如用户可以只通过Offset而忽略其他人。他甚至可以发送0个参数。我怎样才能做到这一点?

正确答案

从 JSON 文本中解组值时,json包不要求所有字段都存在于 JSON 中,也不要求所有 JSON 字段都具有匹配的 Go 字段。

所以你没有什么特别的事情要做,只需将你所拥有的东西解组为 Go 重视你想要或可能想要的东西。

需要注意的一点是,如果 JSON 文本中缺少某个字段,则json包不会更改相应的 Go 字段,因此如果以“新鲜”零值开头,则该字段将保留其零值类型。

大多数情况下,这足以检测字段的存在与否(在 JSON 中),例如,如果在 Go 结构中您有一个SortBy类型为 的字段string,如果 JSON 中缺少该字段,它将保持为空string: ""

如果零值有用且有效,那么您可以转而使用指针。例如,如果在您的应用程序中空值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 %v\n", d, err)

    d, err = Data{}, nil
    err = json.Unmarshal([]byte(`{"I":1}`), &d)
    fmt.Printf("%#v %v\n", d, err)

    d, err = Data{}, nil
    err = json.Unmarshal([]byte(`{"S":"abc"}`), &d)
    fmt.Printf("%#v %v\n", d, err)
}

输出(在Go Playground上试试):

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

理论要掌握,实操不能落!以上关于《如何在 Go 中使用非必需的 JSON 参数?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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