我正在使用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"
}
如果由于某种原因,传入的有效负载具有密钥:
{
"user": {
"name": "Ringo",
"email": "ringo@beatles.com"
}
}
绑定无效。我找不到如何处理这种情况。 我应该如何处理?
答案 0 :(得分:3)
也许您可以用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"
}