如何在golang中使用fiber返回json结构体?

dxpyg8gm  于 2023-04-09  发布在  Go
关注(0)|答案(2)|浏览(314)

因为我在网上找不到关于这个简单问题的任何教程,所以我必须写在这里寻求帮助。
我有这个功能:

package main

import (
    "encoding/json"

    "github.com/gofiber/fiber/v2"
)

type Person struct {
    email string
}

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        user := Person{
            email: "mikolaj73@gmail.com",
        }

        u, err := json.Marshal(user);

        if err != nil {
            panic(err)
        }

        return c.JSON(u);
    })

    app.Listen(":5000")
}

但是当我访问127.0.0.1:5000时,它说:“e30=”而不是用户json。我该怎么做?

vecaoik1

vecaoik11#

看到这个了吗
type Person struct { Email string }
你的struct的成员必须大写,然后json.Marshal就可以了
变更
return c.JSON(u)

return c.SendString(string(u))
如果使用c.JSON,它会将您的字符串转换为Base64格式

package main

import (
    "encoding/json"

    "github.com/gofiber/fiber/v2"
    "fmt"
)

type Person struct {
    Email string
}

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        user := Person{
            Email: "mikolaj73@gmail.com",
        }
        fmt.Println(user)
        u, err := json.Marshal(user);

        if err != nil {
            panic(err)
        }
        fmt.Println(u)
        fmt.Println(string(u))
        return c.SendString(string(u))
    })

    app.Listen(":5000")
}

在完成整个项目之前总是使用Println或其他方法进行调试

igetnqfo

igetnqfo2#

正如其他人所分享的那样,fiber.Ctx.JSON为您执行封送处理。提前调用json.Marshall意味着您要进行两次封送处理。只需将其删除即可。
这里实际上需要使用c.JSON。不要手动封送并返回字符串。
fiber.Ctx.SendString错误地响应标题“Content-Type:text/plain”,而fiber.Ctx.JSON正确响应为“Content-Type:application/json”(两种情况下的预期行为)。

相关问题