为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Go 提供 JSON 响应?

如何使用 Go 提供 JSON 响应?

Go
波斯汪 2021-10-25 16:51:28
问题:目前我正在func Index 像这样打印我的响应,fmt.Fprintf(w, string(response)) 但是如何在请求中正确发送 JSON 以便它可能被视图使用?package mainimport (    "fmt"    "github.com/julienschmidt/httprouter"    "net/http"    "log"    "encoding/json")type Payload struct {    Stuff Data}type Data struct {    Fruit Fruits    Veggies Vegetables}type Fruits map[string]inttype Vegetables map[string]intfunc Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {    response, err := getJsonResponse();    if err != nil {        panic(err)    }    fmt.Fprintf(w, string(response))}func main() {    router := httprouter.New()    router.GET("/", Index)    log.Fatal(http.ListenAndServe(":8080", router))}func getJsonResponse()([]byte, error) {    fruits := make(map[string]int)    fruits["Apples"] = 25    fruits["Oranges"] = 10    vegetables := make(map[string]int)    vegetables["Carrats"] = 10    vegetables["Beets"] = 0    d := Data{fruits, vegetables}    p := Payload{d}    return json.MarshalIndent(p, "", "  ")}
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

您可以设置内容类型标头,以便客户知道期望 json


w.Header().Set("Content-Type", "application/json")

将结构编组为 json 的另一种方法是使用 http.ResponseWriter


// get a payload p := Payload{d}

json.NewEncoder(w).Encode(p)


查看完整回答
反对 回复 2021-10-25
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

其他用户在编码时评论说Content-Type是plain/text。

您必须先使用 设置内容类型w.Header().Set(),然后使用w.WriteHeader().


如果你w.WriteHeader()先打电话,然后再打电话w.Header().Set(),你会得到plain/text。


示例处理程序可能如下所示:


func SomeHandler(w http.ResponseWriter, r *http.Request) {

    data := SomeStruct{}

    w.Header().Set("Content-Type", "application/json")

    w.WriteHeader(http.StatusCreated)

    json.NewEncoder(w).Encode(data)

}


查看完整回答
反对 回复 2021-10-25
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

你可以在你的getJsonResponse函数中做这样的事情-


jData, err := json.Marshal(Data)

if err != nil {

    // handle error

}

w.Header().Set("Content-Type", "application/json")

w.Write(jData)


查看完整回答
反对 回复 2021-10-25
  • 3 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信