获取JSON作为POST参数

And*_*res 5 post json ruby-on-rails

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

information = params[:json_data]
data_parsed = JSON.parse(information)
Run Code Online (Sandbox Code Playgroud)

在获得JSON时,这是全部还是我必须做些不同的事情?发件人必须像字符串一样发送给我?

谢谢!

jdl*_*jdl 19

你所描述的是好的,但它意味着有一个名为的参数json_data.如果你的意思是整个POST身体只不过是JSON,那么你想看看request.raw_post.你最终得到这样的东西:

information = request.raw_post
data_parsed = JSON.parse(information)
Run Code Online (Sandbox Code Playgroud)


Hon*_*ong 13

公文称,

如果请求的"Content-Type"标头设置为"application/json",则Rails会自动将参数加载到params散列中,您可以像平常一样访问它.

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

{ "company": { "name": "acme", "address": "123 Carrot Street" } }
Run Code Online (Sandbox Code Playgroud)

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

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

{ "name": "acme", "address": "123 Carrot Street" }
Run Code Online (Sandbox Code Playgroud)

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

{ name: "acme", address: "123 Carrot Street", company: { name: "acme", address: "123 Carrot Street" } }
Run Code Online (Sandbox Code Playgroud)

所以,如果你发送/ POST { "hello": "world"}apples/,那么 params['apple']将是JSON的有效载荷的对象.

class ApplesController < ApplicationController
  def create
    # params['apple'] is the object represents Json payload
  end
end
Run Code Online (Sandbox Code Playgroud)