我有一个ruby应用程序,我需要从客户端收到一个JSON。接收JSON就像接收字符串一样?我只需要做一些事情:
information = params[:json_data]
data_parsed = JSON.parse(information)
获得JSON时,我或者必须做些什么?发件人必须像字符串一样发送给我?
谢谢!
答案 0 :(得分:18)
你所描述的是好的,但它暗示有一个名为json_data
的参数。如果您的意思是整个POST
正文只是JSON
,那么您需要查看request.raw_post
。你最终会得到这样的东西:
information = request.raw_post
data_parsed = JSON.parse(information)
答案 1 :(得分:13)
如果请求的“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