如何动态解析go fiber中的请求体?
How to dynamically parse request body in go fiber?
我有一个 API 内置的 go fiber。
我正在尝试将请求正文数据动态解析为键值对。
正如我们所知,fiber 有 context.Body()
和 context.Bodyparser()
方法来执行此操作,但我找不到任何合适的示例来使用这些方法动态执行此操作。
例如:
func handler(c *fiber.Ctx) error {
req := c.Body()
fmt.Println(string(req))
return nil
}
输出:
key=value&key2=value2&key3&value3
我正在寻找的是一个动态的json,例如:
{
key:"value",
key2:"value2",
key3:"value3",
}
内容的 mime-type is application/x-www-form-urlencoded
not application/json
. To parse that you can use net/url.ParseQuery
. The result of that is a map[string][]string
which you can then easily convert to a map[string]string
and then marshal that with the encoding/json
包以获得您想要的 JSON 输出。
func handler(c *fiber.Ctx) error {
values, err := url.ParseQuery(strings(c.Body()))
if err != nil {
return err
}
obj := map[string]string{}
for k, v := range values {
if len(v) > 0 {
obj[k] = v[0]
}
}
out, err := json.Marshal(obj)
if err != nil {
return err
}
fmt.Println(string(out))
return nil
}
我有一个 API 内置的 go fiber。 我正在尝试将请求正文数据动态解析为键值对。
正如我们所知,fiber 有 context.Body()
和 context.Bodyparser()
方法来执行此操作,但我找不到任何合适的示例来使用这些方法动态执行此操作。
例如:
func handler(c *fiber.Ctx) error {
req := c.Body()
fmt.Println(string(req))
return nil
}
输出:
key=value&key2=value2&key3&value3
我正在寻找的是一个动态的json,例如:
{
key:"value",
key2:"value2",
key3:"value3",
}
内容的 mime-type is application/x-www-form-urlencoded
not application/json
. To parse that you can use net/url.ParseQuery
. The result of that is a map[string][]string
which you can then easily convert to a map[string]string
and then marshal that with the encoding/json
包以获得您想要的 JSON 输出。
func handler(c *fiber.Ctx) error {
values, err := url.ParseQuery(strings(c.Body()))
if err != nil {
return err
}
obj := map[string]string{}
for k, v := range values {
if len(v) > 0 {
obj[k] = v[0]
}
}
out, err := json.Marshal(obj)
if err != nil {
return err
}
fmt.Println(string(out))
return nil
}