我有一个内置的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",
}

推荐答案

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

Go相关问答推荐

如何修复Go中调用GetRawInputDeviceInfA Windows API函数时的错误?

Golang内置打印(Ln)函数&S行为怪异

如何获取集群外go Kubernetes客户端的当前命名空间?

如何在 Go 中将 int 转换为包含 complex128 的泛型类型?

gopacket:IP-in-IP 数据包上的解码层

Yocto 无法交叉编译 GoLang Wails 应用程序

GoLang:net.LookupHost 返回重复的 ips

Go 中如何调用测试函数?

Golang crypto/rand 线程安全吗?

如何处理 Go 的 firebase admin sdk 错误?

如何使用带有方法的字符串枚举作为通用参数?

接受通道和切片的通用函数

io.Pipe 使用困难

如何在Go中替换符号并使下一个字母大写

GORM GIN 更新查询导致 500 内部服务器错误

为什么 go.mod 中的所有依赖都是间接的?

什么是无效字符实体 &ccb

map和struct golang的合并

即使没有竞争条件也没有得到任何输出

Go 错误:cannot use generic type without instantiation