回答

收藏

如何使用 Go 提供 JSON 响应?

技术问答 技术问答 188 人阅读 | 0 人回复 | 2023-09-12

问题:目前我正在func Index 像这样打印我的响应,fmt.Fprintf(w,string(response)) 但是如何在请求中正确发送 JSON 以便它可能被视图使用?; h0 N7 s4 A& _3 Q0 D' C
    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,"","  ")}
    ) c0 R: y- T9 h$ q$ k- z8 f4 a% X
               5 j3 y0 ~2 G- Y( M9 F! B( M% W
    解决方案:                                                                : c, a  I5 v# L: u) ^7 m" R
                                                                可以设置内容类型标头,让客户知道期望 json4 @5 X6 u* a6 X9 s9 @6 h. C* x1 w
    w.Header().Set("Content-Type","application/json")
    . O7 g4 N7 t  S' C4 n. T! I
将结构组织成 json另一种方法是使用  http.ResponseWriter
' H0 ?$ A' {* ?! L$ G
    // get a payload p := Payload{d}json.NewEncoder(w).Encode(p)
    ) ^" p9 o( g# H1 A" B1 F6 e/ f
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则