在golang中,处理JSON格式的x-www-form-urlencoded请求时,有时候会遇到嵌套的键值对。php小编百草为大家提供了解决方案。通过使用json.Unmarshal函数将请求的body解析成map[string]interface{}类型,然后通过类型断言和类型转换来获取嵌套键值对的值。这种方法简单有效,可以帮助开发者轻松处理这类请求。接下来,我们将详细介绍具体的实现步骤。
我有一个用例,我们在 x-www-form-urlencoded
主体中获取嵌套键值,如下所示
name=abc&age=12¬es[key1]=value1¬es[key2]=value2
我尝试了 url.parsequery("name=abc&age=12¬es[key1]=value1¬es[key2]=value2")
但它给出了
{ "name": "abc", "age": 12, "notes[key1]": "value1", "notes[key2]": "value2" }
如何为上述正文获取以下 json 格式的值
{ "name": "abc", "age": 12, "notes": { "key1": "value1", "key2": "value2" } }
注释可能采用 3 级嵌套格式
我尝试过 url.parsequery
和 r.form
但它们都给出了 notes[key1]
和 notes[key2]
。url.parsequery
和 r.form
但它们都给出了 notes[key1]
和 notes[key2]
。
要使用这种类型的查询字符串参数名称解组嵌套键值,可以使用 derekstavis/go -qs
解决方法
要使用这种类型的查询字符串参数名称解组嵌套键值,可以使用 derekstavis/go -qs
map[string]interface{}
这是 rack 查询字符串解析器的端口。
这会返回一个 age
的值作为字符串返回,但是,这对于 url.parsequery
,其嵌套键值如下。
值得注意的是,
来说是相同的。如果需要将其编组为整数,则可以分叉和修改该包。
{ "age": "12", "name": "abc", "notes": { "key1": "value1", "key2": "value2" } }
package main import ( "encoding/json" "fmt" "log" qs "github.com/derekstavis/go-qs" ) func main() { v := "name=abc&age=12¬es[key1]=value1¬es[key2]=value2" q, err := qs.Unmarshal(v) if err != nil { log.Fatal(err) } j, err := json.MarshalIndent(q, "", " ") if err != nil { log.Fatal(err) } fmt.Println(string(j)) }
以上是在golang中获取JSON格式的x-www-form-urlencoded请求的嵌套键值对的详细内容。更多信息请关注PHP中文网其他相关文章!