如何发送正确的JSON响应消息格式



我有一个Go程序,我想打印JSON响应消息:

func MyPluginFunction(w http.ResponseWriter, r *http.Request) {
data := `{"status":"false","error":"bad request"}`
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusBadRequest )
json.NewEncoder(w).Encode(data)
}

然而,当我使用这个函数时,我得到了一个奇怪的JSON格式。它看起来像这样:

"{"status":"false","error":"bad request"}"

有没有什么方法可以让响应消息变成一个正常的JSON,比如:

{
"status": "false",
"error": "bad request"
}

您的data已经包含JSON编码的数据,所以您应该按原样编写,而不需要重新编码:

func MyPluginFunction(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusBadRequest )
data := `{"status":"false","error":"bad request"}`
if _, err := io.WriteString(w, data); err != nil {
log.Printf("Error writing data: %v", err)
}
}

如果将data传递给Encoder.Encode(),则将其视为";常规的";字符串,并将按此方式进行编码,从而生成一个JSON字符串,其中根据JSON规则转义双引号。

只有当您具有非JSON Go值时,才需要进行JSON编码,例如本例中的

func MyPluginFunction(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusBadRequest)
data := map[string]any{
"status": "false",
"error":  "bad request",
}
if err := json.NewEncoder(w).Encode(data); err != nil {
log.Printf("Error writing data: %v", err)
}
}

最新更新