回答

收藏

如何使用 Go 提供 JSON 响应?

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

问题:目前我正在func Index 像这样打印我的响应,fmt.Fprintf(w,string(response)) 但是如何在请求中正确发送 JSON 以便它可能被视图使用?3 y3 ~1 q4 V. d* _
    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,"","  ")}* I. t* R  ^0 [) {: s; k
               
% }/ I" M1 O, T  o, k$ u4 `    解决方案:                                                                0 f2 i/ u( _* x6 A) O
                                                                可以设置内容类型标头,让客户知道期望 json+ d& p# l6 C& @7 T
    w.Header().Set("Content-Type","application/json")
    9 G" u9 P; r4 I9 p  p: B
将结构组织成 json另一种方法是使用  http.ResponseWriter
3 ]0 c2 R* X" l) W) l" P) e
    // get a payload p := Payload{d}json.NewEncoder(w).Encode(p)8 Y$ L* g" T# G: E4 B7 R- P
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则