如何解析表单数组在golang Beego



如何使用Beego解析html表单数组。

<input name="names[]" type="text" /> <input name="names[]" type="text" /> <input name="names[]" type="text" />

去Beego

type Rsvp struct {
    Id    int      `form:"-"`
    Names []string `form:"names[]"`
}
rsvp := Rsvp{}
if err := this.ParseForm(&rsvp); err != nil {
    //handle error
}
input := this.Input()
fmt.Printf("%+vn", input) // map[names[]:[name1 name2 name3]]
fmt.Printf("%+vn", rsvp) // {Names:[]}

为什么Beego ParseForm方法返回一个空的名字?

如何获得值进入rsvp.Names?

谢谢@ysqi给我提示。我添加了一个详细的例子来解析beego

中的表单数据等关联数组下面是我的表单结构:
<input name="contacts[0][email]" type="text" value="a1@gmail.com"/>
<input name="contacts[0][first_name]" type="text" value="f1"/>
<input name="contacts[0][last_name]" type="text" value="l1"/>
<input name="contacts[1][email]" type="text" value="a2@gmail.com"/>
<input name="contacts[1][first_name]" type="text" value="f2"/>
<input name="contacts[1][last_name]" type="text" value="l2"/>

golang (beego)代码:

contacts := make([]map[string]string, 0, 3)
this.Ctx.Input.Bind(&contacts, "contacts")

联系人变量:

[
  {
    "email": "user2@gmail.com",
    "first_name": "Sam",
    "last_name": "Gamge"
  },
  {
    "email": "user3@gmail.com",
    "first_name": "john",
    "last_name": "doe"
  }
]

现在你可以这样使用:

for _, contact := range contacts {
    contact["email"]
    contact["first_name"]
    contact["last_name"]
}

从Request的FormValue方法的实现中可以看到,如果有多个值,它返回第一个值:http://golang.org/src/pkg/net/http/request.go?s=23078:23124#L795最好是获取属性本身r.f form [key]并手动遍历所有结果。我不确定Beego是如何工作的,但只是使用生的请求。解析表单和请求。表格或请求。PostForm映射应该可以完成这项工作。http://golang.org/src/pkg/net/http/request.go?s=1939:6442 L61

你可以这样做:见doc

v := make([]string, 0, 3)
this.Ctx.Input.Bind(&v, "names")

最新更新