7

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

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

仅此而已,还是在获取 JSON 时我必须做一些不同的事情?发件人必须向我发送类似的字符串?

谢谢!

4

2 回答 2

24

您所描述的内容是可以的,但这意味着有一个名为 的参数json_data。如果你的意思是整个POST身体不过是JSON,那你要看看request.raw_post。你最终会得到这样的东西:

information = request.raw_post
data_parsed = JSON.parse(information)
于 2012-09-01T02:35:19.400 回答
15

官方文件说,

如果您的请求的“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
于 2016-08-29T13:21:07.380 回答