gpt4 book ai didi

go - 带有嵌套负载的 JSON 绑定(bind)

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:31 33 4
gpt4 key购买 nike

我正在使用 Go 和 Buffalo 开发 API。收到请求时,可以automatically map the JSON payload到一个结构:

func MyAction(c buffalo.Context) error {
u := &User{}
if err := c.Bind(u); err != nil {
return err
}
u.Name // "Ringo"
u.Email // "ringo@beatles.com"
}

但是,它假设负载是这种形状的:

{
"name": "Ringo",
"email": "ringo@beatles.com"
}

如果由于某种原因,传入的负载有一个 key :

{
"user": {
"name": "Ringo",
"email": "ringo@beatles.com"
}
}

绑定(bind)无效。我找不到如何处理这种情况。我应该如何处理这个问题?

最佳答案

也许您可以使用 map[string]User{} 包装您的结构,这是一个示例:

func MyAction(c buffalo.Context) error {
u := map[string]User{
"user": User{},
}
if err := c.Bind(&u); err != nil {
return err
}
user := u["user"]
user.Name // "Ringo"
user.Email // "ringo@beatles.com"
}

在我看来,定义一个结构将是更简洁的解决方案:

type UserObject struct {
User struct {
Email string
Name string
}
}

func MyAction(c buffalo.Context) error {
u := UserObject{}
if err := c.Bind(&u); err != nil {
return err
}
user := u.User
user.Name // "Ringo"
user.Email // "ringo@beatles.com"
}

关于go - 带有嵌套负载的 JSON 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57109141/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com