我使用 JSON 數(shù)據(jù)向我的 Go 應(yīng)用程序發(fā)送一個 POST 請求,如下所示:var test = {text: "Lorem ipsum dolor sit amet"};$.ajax({ url: "/api/test/add", type: "POST", dataType: "json", contentType: "application/json; charset=utf-8", data: JSON.stringify(test), success: function(data) { // ... }, error: function(xhr, status, err) { // ... }});在我的 Go 應(yīng)用程序中,我有以下代碼(使用ventigo):type Test struct { id int text string}func apiAddTestHandler(w http.ResponseWriter, r *http.Request) { r_body, err := ioutil.ReadAll(r.Body) if err != nil { panic(err) } // Here looks like everything is ok because I get // {"text": "Lorem ipsum dolor sit amet"} if I try // to convert r_body to string (string(r_body)). var test Test err = json.Unmarshal(r_body, &test) if err != nil { panic(err) } // Process test struct below, but here I get // {id:0 text:} if I try to use or print the value // of test (fmt.Printf("%+v\n", test)).}func main() { router := vestigo.NewRouter() router.Post("/api/test/add", apiAddTestHandler) err := http.ListenAndServe(":3000", router) if err != nil { log.Fatal("ListenAndServe: ", err) }}問題是,在 apiAddTestHandler() 中,我無法使用解碼的 JSON 數(shù)據(jù)“填充”測試結(jié)構(gòu)。評論中的更多信息。我也嘗試了下面的代碼片段,但沒有運氣:decoder := json.NewDecoder(r.Body)var test Testerr := decoder.Decode(&test)if err != nil { panic(err)}問題是什么?
1 回答

慕田峪4524236
TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊
從Unmarshal文檔(重點是我的):
要將 JSON 解組為結(jié)構(gòu),Unmarshal 將傳入的對象鍵與 Marshal 使用的鍵(結(jié)構(gòu)字段名稱或其標(biāo)簽)進(jìn)行匹配,更喜歡精確匹配,但也接受不區(qū)分大小寫的匹配。Unmarshal 只會設(shè)置 struct 的導(dǎo)出字段。
您需要更改結(jié)構(gòu)中的字段定義:
type Test struct {
ID int
Text string
}
注意我使用ID而不是Id每個Golang 命名約定。
- 1 回答
- 0 關(guān)注
- 225 瀏覽
添加回答
舉報
0/150
提交
取消