我有这个卷曲电话:
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
p "hi #{params['name']}"
失败,因为它不是哈希值。我如何使它工作?
我的目标是将发布的json设为params
哈希。所以我可以像往常一样使用params
。
答案 0 :(得分:16)
您实际上是在传递Ruby Hash而不是JSON对象。
将curl命令更新为:
-d '{"name":"abc","orgid":"12","subject":"my subject"}'
然后在你的Sinatra行动中这样做:
params = JSON.parse(request.env["rack.input"].read)
确保require 'json'
答案 1 :(得分:0)
使用
require 'json'
params = JSON.parse(request.body.read)