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

Go 的 json 解码器无法处理最简单的输入。为什么?

Go 的 json 解码器无法处理最简单的输入。为什么?

Go
至尊宝的传说 2021-06-10 22:33:23
我准备用 Go 编写一个 AJAX 类型的应用程序,这是一个示例应用程序,用于熟悉它的工作原理。但事实并非如此。InputRec (irec) 字段在解码后只有零。先说源码:package mainimport (  "net/http"  "encoding/json"  "fmt"  // "io/ioutil")type InputRec struct {  a, b float64}type RetRec struct {  sum float64}func addHandler(w http.ResponseWriter, r *http.Request) {  var outJson []byte  var irec InputRec  var orec RetRec/*  inJson, err := ioutil.ReadAll(r.Body)  num := len(inJson)  if err != nil {    panic("Error on reading body")  }  r.Body.Close()  err = json.Unmarshal(inJson, &irec)  fmt.Println("Input ", num, " bytes: ", string(inJson)) */  decoder := json.NewDecoder(r.Body)  err := decoder.Decode(&irec)  if err != nil {    panic("Error on JSON decode")  }  orec.sum = irec.a + irec.b  fmt.Println("a: ", irec.a, " b: ", irec.b, " Sum: ", orec.sum)  outJson, err = json.Marshal(orec)  if err != nil {    panic("Error on JSON encode")  }  w.Header().Set("Content-Type", "application/json")  _, err = w.Write(outJson)  if err != nil {    panic("Error writing response")  }}func main() {  http.HandleFunc("/", addHandler)  http.ListenAndServe(":1234", nil)}现在测试:curl -X POST -i -d '{"a":5.4,"b":8.7}'  http://localhost:1234/HTTP/1.1 200 OKContent-Type: application/jsonContent-Length: 2Date: Sun, 23 Jun 2013 17:01:08 GMT{}请注意,我知道请求正文正在执行该函数,因为我已经尝试使用注释掉的代码而不是较短的 json.Decoder 行,并且它按预期打印了请求正文。发出上述 curl 请求时,这显示为 Println 命令的输出:a:0 b:0 总和:0似乎很清楚 json 字段与 InputRec (只是 a 和 b)对齐,那么这里有什么问题?非常感谢!
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

我知道了。我的结构的成员必须大写。:/


查看完整回答
反对 回复 2021-06-21
  • 1 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信