我有一个 ruby 应用程序,我需要从客户端接收 JSON。接收 JSON 就像接收字符串一样?我只需要做类似的事情:
information = params[:json_data]
data_parsed = JSON.parse(information)
仅此而已,还是在获取 JSON 时我必须做一些不同的事情?发件人必须向我发送类似的字符串?
谢谢!
我有一个 ruby 应用程序,我需要从客户端接收 JSON。接收 JSON 就像接收字符串一样?我只需要做类似的事情:
information = params[:json_data]
data_parsed = JSON.parse(information)
仅此而已,还是在获取 JSON 时我必须做一些不同的事情?发件人必须向我发送类似的字符串?
谢谢!
您所描述的内容是可以的,但这意味着有一个名为 的参数json_data
。如果你的意思是整个POST
身体不过是JSON
,那你要看看request.raw_post
。你最终会得到这样的东西:
information = request.raw_post
data_parsed = JSON.parse(information)
官方文件说,
如果您的请求的“Content-Type”标头设置为“application/json”,Rails 会自动将您的参数加载到 params 哈希中,您可以像往常一样访问它。
例如,如果您要发送此 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