go - 具有嵌套负载的 JSON 绑定
问题描述
我正在使用 Go 和 Buffalo 开发 API。接收请求时,可以自动将 JSON 有效负载映射到结构:
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"
}
}
绑定不起作用。我找不到如何处理这种情况。我应该如何处理这个?
解决方案
也许你可以用 包装你的结构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"
}
推荐阅读
- r - 基于另一列替换数据框列中的值
- swift - 如何将 UITextField 输入从 String 转换为 Double?
- wordpress - ACF - 根据选择值显示 div
- sql - 每次值更改时如何生成新数字
- feathersjs - 使用 Feathersjs 设计注册程序
- php - php dosnt 发布选定的 html
- python - 带有三个花括号的 jinja2,不包含额外的空格
- java - Android Studio:无法安装应用程序
- android - 多个过渡在 MotionLayout 中不起作用
- sqlite - 在 SQLITE 中插入后使用触发器创建组合的唯一键字段