获取JSON作为POST参数

时间:2012-08-31 19:45:18

标签: ruby-on-rails json post

我有一个ruby应用程序,我需要从客户端收到一个JSON。接收JSON就像接收字符串一样?我只需要做一些事情:

information = params[:json_data]
data_parsed = JSON.parse(information)

获得JSON时,我或者必须做些什么?发件人必须像字符串一样发送给我?

谢谢!

2 个答案:

答案 0 :(得分:18)

你所描述的是好的,但它暗示有一个名为json_data的参数。如果您的意思是整个POST正文只是JSON,那么您需要查看request.raw_post。你最终会得到这样的东西:

information = request.raw_post
data_parsed = JSON.parse(information)

答案 1 :(得分:13)

official document说,

  

如果请求的“Content-Type”标头设置为   “application / json”,Rails会自动将你的参数加载到   params hash,你可以正常访问它。

     

例如,如果您要发送此JSON内容:

{ "company": { "name": "acme", "address": "123 Carrot Street" } }
     

您的控制器将params[:company]收到{ "name" => "acme", "address" => "123 Carrot Street" }

     

此外,如果您在初始化程序中打开了config.wrap_parameters或在控制器中调用了wrap_parameters,则可以安全地省略JSON参数中的根元素。在这种情况下,将使用根据控制器名称选择的密钥克隆和包装参数。所以上面的JSON POST可以写成:

{ "name": "acme", "address": "123 Carrot Street" }
     

并且,假设您将数据发送到CompaniesController,它将被包含在:company键中,如下所示:

{ name: "acme", address: "123 Carrot Street", company: { name: "acme", address: "123 Carrot Street" } }

因此,如果您发送/ POST { "hello": "world"}apples/,那么 params['apple']将成为Json有效负载的对象。

class ApplesController < ApplicationController
  def create
    # params['apple'] is the object represents Json payload
  end
end