为了账号安全,请及时绑定邮箱和手机立即绑定

从 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 关注
  • 295 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号