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

发布于 2025-01-12 17:01:36 字数 597 浏览 2 评论 0原文

我在 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",
}

I have an API built in go fiber.
I'm tryng to parse request body data as key value pairs dynamically.

As we know, fiber has context.Body() and context.Bodyparser() methods to do this but I couldn't find any proper example to do this dynamically with these methods.

e.g:

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

output:

key=value&key2=value2&key3&value3

What I'm looking for is a dynamic json like:

{
    key:"value",
    key2:"value2",
    key3:"value3",
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

离鸿 2025-01-19 17:01:36

内容的 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
}

The content's 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 package to get your desired JSON output.

Here's a code you can start with:

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
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文