我有一个 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
键中,如下所示:并且,假设你正在将数据发送给CompaniesController,那么它会像这样被包裹在
:company
关键字中:因此,如果您将
{ name: "acme", address: "123 Carrot Street", company: { name: "acme", address: "123 Carrot Street" } }
{"hello":"world"}
发送/ POST到apples /
,那么params ['apple']
将是Json负载对象。
class ApplesController < ApplicationController def create # params['apple'] is the object represents Json payload end end
deep_munge
有时会干扰参数,请参见 https://github.com/rails/rails/issues/13766。 - Shelvacu