亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 POST 請求解碼 JSON 在 Go 中失敗

從 POST 請求解碼 JSON 在 Go 中失敗

Go
牛魔王的故事 2021-12-20 17:09:37
我使用 JSON 數據向我的 Go 應用程序發送一個 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 應用程序中,我有以下代碼(使用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 數據“填充”測試結構。評論中的更多信息。我也嘗試了下面的代碼片段,但沒有運氣:decoder := json.NewDecoder(r.Body)var test Testerr := decoder.Decode(&test)if err != nil {  panic(err)}問題是什么?
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

從Unmarshal文檔(重點是我的):


要將 JSON 解組為結構,Unmarshal 將傳入的對象鍵與 Marshal 使用的鍵(結構字段名稱或其標簽)進行匹配,更喜歡精確匹配,但也接受不區分大小寫的匹配。Unmarshal 只會設置 struct 的導出字段。


您需要更改結構中的字段定義:


type Test struct {

  ID   int

  Text string

}

注意我使用ID而不是Id每個Golang 命名約定。


查看完整回答
反對 回復 2021-12-20
  • 1 回答
  • 0 關注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號