Json Golang net/http请求正文始终为空

Json Golang net/http请求正文始终为空,json,web,go,Json,Web,Go,我正在尝试将JSON参数发送到我的服务器,并使用JSON.Decoder解析它们。我已经读到,您应该能够从request.Body属性获取查询参数。以下是我的服务器代码: func stepHandler(res http.ResponseWriter, req *http.Request) { var v interface{} err := json.NewDecoder(req.Body).Decode(&v) if err != nil {

我正在尝试将JSON参数发送到我的服务器,并使用JSON.Decoder解析它们。我已经读到,您应该能够从request.Body属性获取查询参数。以下是我的服务器代码:

func stepHandler(res http.ResponseWriter, req *http.Request) {
    var v interface{}
    err := json.NewDecoder(req.Body).Decode(&v)
    if err != nil {
       // handle error
    }
    log.Println(v)
}
每次我都会看到
2014/12/26 22:49:23
(当然是不同的时间戳)。我的客户端AJAX调用如下所示:

$.ajax({
  url: "/step",
  method: "get",
  data: {
    steps: $("#step-size").val(),
    direction: $("#step-forward").prop("checked") ? 1 : -1,
    cells: JSON.stringify(painted)
  },
  success: function (data) {
    painted = data;
    redraw();
  },
  error: function (xhr) {
    console.log(xhr);
  }
});
发送内容的示例URL:

http://localhost:5000/?steps=1&direction=1&cells=%5B%7B%22row%22%3A11%2C%22column%22%3A15%7D%2C%7B%22row%22%3A12%2C%22column%22%3A15%7D%5D
更好地查看参数:

{
  steps: "1",
  direction: "1",
  cells: "[{"row":11,"column":15},{"row":12,"column":15}]"
}
我尝试了GET和POST请求


为什么我的请求体从未解码?如果我试图单独打印请求正文,我也会看到nil。

请求的
正文
在有效负载内发送-它不是URL的一部分

你正试图接近尸体。。当您的数据确实在URL中时


您希望它将ajax
方法:“get”
更改为
方法:“post”
——以便数据与正文一起发布,而不是作为URL的一部分发布。您还应确保数据确实与请求一起通过您选择的浏览器“开发人员工具”发送。或者,如果您确实希望将数据作为URL的一部分发送,您应该访问请求的
URL
参数,并手动将值解析为一个结构(json包不会为您IIRC执行此操作)。

req.Body
确实是空的——因此,我将其称为
req.ParseForm()
然后改为使用
req.Form
Body
不会获取请求正文中肯定没有的内容(例如查询参数)。

在我看来,
req.Body
确实是空的——那么为什么不调用
req.ParseForm()
然后使用
req.Form
?是什么给您的印象是,
Body
会以某种方式获取请求正文中肯定不存在的内容(查询参数)?我似乎对req.Body引用的内容有误解。req.Form给了我一个映射-有没有办法自动将查询字符串解组成一个对象?@AlexMartelli,我同意你的解决方案。如果你创造一个答案,我可以把它标记为这个问题的解决方案。非常感谢你!完成@LarryPrice——不客气!Json不会这样做,但是
req.ParseForm()
(然后访问
req.Form
)应该代表您进行解析,不是吗?是的-我的观点是将其映射到结构将是一个手动过程-与Json包的
解码
方法相反。我尝试将我的方法更改为POST,我验证了数据是作为有效载荷在体内发送的,但每次我尝试解码时仍然得到零。然而,现在我的身体看起来像
&{0xc208020620 false{0 0}false}
。你能告诉我们你试图解码的模型和你有什么错误吗?