我有这个卷毛电话:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"name":"abc", "orgid":"12", "subject":"my subject"}' http://localhost:3000/mysinatraapp
post '/mysinatraapp' do
unless request.preferred_type.eql? 'text/html'
# This is not really params hash. It will be a string like "{\"name\"=>\"abc\", \"orgid\"=>\"12\", \"subject\"=>\"my subject\"}"
params = request.env["rack.input"].read
...
...
halt 400 if params.length == 0
end
# This does not work
p "hi #{params['name']}"
end
Run Code Online (Sandbox Code Playgroud)
p "hi #{params['name']}"失败,因为它不是哈希.我如何使其工作?
我的目标是将发布的json作为params哈希.这样我就可以params照常使用了.
小智 16
您实际上是传递Ruby Hash而不是JSON对象.
将curl命令更新为如下所示:
-d '{"name":"abc","orgid":"12","subject":"my subject"}'
Run Code Online (Sandbox Code Playgroud)
然后在你的Sinatra行动中这样做:
params = JSON.parse(request.env["rack.input"].read)
Run Code Online (Sandbox Code Playgroud)
确保你 require 'json'