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

eyh26e7m  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(162)

我在Go Fiber中内置了一个API。我尝试将请求体数据动态解析为键值对。
正如我们所知,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",
}
yzuktlbb

yzuktlbb1#

内容的mime-typeapplication/x-www-form-urlencoded而不是application/json。要解析它,可以使用net/url.ParseQuery。结果是一个map[string][]string,然后您可以轻松地将其转换为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
}

相关问题