如何在Rails中解析传入的POST请求的json?
我有以下问题。 Web服务正在向我的应用程序发送JSON POST请求,我想解析它。
我以为我可以用它来访问params
@var = params[:name_of_the_JSON_fields]
但它不起作用。 我在我的Heroku日志中看到请求已完成并且参数在那里,但我无法存储它们。
有没有人有想法?
当您发布JSON(或XML)时,rails将为您处理所有解析,但您需要包含正确的标头。
您的应用包括:
Content-type: application/json
一切都会很酷。
如果您在params哈希中接收JSON,您可以自己转换它:
@var = JSON.parse(params[:name_of_the_JSON_fields])
这个答案可能并不特定于这个确切的问题,但在设置AWS SNS推送通知时我遇到了类似的问题。 我无法解析甚至查看初始订阅请求。 希望这可以帮助其他有类似问题的人。
我发现如果你有一个简单的API设置,默认格式设置为json,你不需要解析,类似于下面(在config / routes.rb中):
namespace :api, defaults: {format: :json} do namespace :v1 do post "/controller_name" => 'controller_name#create' get "/controller_name" => 'controller_name#index' end end
我发现的重要事情是传入的post请求可以通过变量request
访问。 为了将其转换为可读的JSON格式,您可以调用以下内容:
request.body.read()
可能为时已晚,无法帮助你,但也许未来的人会在这里查看:)也许rails应该为你解析json,但这对我来说从来没有用过。 我直接读了请求体。 我使用’Yajl’json解析器 – 它非常快。 但是常规的旧’json’也可以在这里工作(只需使用JSON.parse)
request.body.rewind body = Yajl::Parser.parse request.body.read.html_safe