我目前正在Golang工作,我正在开发一个API,在POST处理程序中我需要在Post表单中接收一个数组,但是有了命名位置,我的意思是这样的:
myarray[a]:"some Value"
myarray[otherName]: "some Other value"
myarray[x] : "something different"
现在我正在尝试使用CLI中的curl发布Post请求。我寄这个:
curl -i -X POST --url http://localhost:20000/myendpoint -H "Content-Type: application/x-www-form-urlencoded" -d 'Name=Comp&myarray[x]=somethingdifferent&myarray[otherName]=someOtherValue'
而且,当我在Go中打印表单值时,我得到:
[myarray[x]:[somethingdifferent] myarray[otherName]:[someOtherValue]]
直到这里我理解了一切,然后我需要在golang变量中获取数组myarray
,我该怎么做?当我这样做时:
req.Form["myarray"]
我什么也得不到,我的目的是获取该数组并将其存储为数据库中的JSON对象,因为我不知道该数组中可以发送哪个字段。我需要这样的东西:
myarray[[x]=somethingdifferent,[otherName]=someOtherValue]
答案 0 :(得分:1)
您可以自己解析:
func extractDynArray(form url.Values, key string) (result map[string]interface{}, err error) {
result = make(map[string]interface{})
reg, err := regexp.Compile(`^([a-z]+)\[([a-z]+)\]$`)
if err != nil {
log.Fatalf("Error compiling regexp: %v", err)
}
var matches [][]string
for k, v := range form {
matches = reg.FindAllStringSubmatch(k, -1)
if len(matches) != 1 {
continue
}
if key != "" && matches[0][1] != key {
continue
}
if len(matches[0]) != 3 {
continue
}
result[matches[0][2]] = v
}
return
}
func handler(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil {
log.Fatalf("Cannot parse form %v", err)
}
//form := r.Form["myarray"]
fmt.Printf("Form: %+v\n", r.Form)
fmt.Printf("Form myarray: %+v \n", r.Form["myarray"])
parsed, err := extractDynArray(r.Form, "myarray")
fmt.Printf("Parsed: %v. Err: %v", parsed, err)
}