因为我在网上找不到关于这个简单问题的任何教程,所以我必须写在这里寻求帮助。
我有这个功能:
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。我该怎么做?
2条答案
按热度按时间vecaoik11#
看到这个了吗
type Person struct { Email string }
你的struct的成员必须大写,然后json.Marshal就可以了
变更
return c.JSON(u)
到
return c.SendString(string(u))
如果使用c.JSON,它会将您的字符串转换为Base64格式
在完成整个项目之前总是使用Println或其他方法进行调试
igetnqfo2#
正如其他人所分享的那样,
fiber.Ctx.JSON
为您执行封送处理。提前调用json.Marshall
意味着您要进行两次封送处理。只需将其删除即可。这里实际上需要使用
c.JSON
。不要手动封送并返回字符串。fiber.Ctx.SendString
错误地响应标题“Content-Type:text/plain”,而fiber.Ctx.JSON
正确响应为“Content-Type:application/json”(两种情况下的预期行为)。