go Fiber中如何动态解析请求体?

ham*_*han 4 go go-fiber

我在 go Fiber 中内置了一个 API。我正在尝试动态地将请求正文数据解析为键值对。

众所周知,光纤具有context.Body()执行context.Bodyparser()此操作的方法,但我找不到任何适当的示例来使用这些方法动态执行此操作。

例如:

func handler(c *fiber.Ctx) error {
    req := c.Body()
    fmt.Println(string(req))
    
    return nil
}
Run Code Online (Sandbox Code Playgroud)

输出:

key=value&key2=value2&key3&value3
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一个动态 json,例如:

key=value&key2=value2&key3&value3
Run Code Online (Sandbox Code Playgroud)

mko*_*iva 6

内容的mime- type不是application/x-www-form-urlencodedapplication/json要解析您可以使用net/url.ParseQuery. 其结果是 a,map[string][]string然后您可以轻松地将其转换为 a map[string]string,然后将其与包一起encoding/json编组以获得所需的 JSON 输出。

您可以从以下代码开始:

func handler(c *fiber.Ctx) error {
    values, err := url.ParseQuery(string(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
}
Run Code Online (Sandbox Code Playgroud)