我正在使用
申请机架申请curl -X POST -d '{"device":{"username":"123456","name":"some name","location":"Hidden"}}' http://localhost:9292/device
在机架应用程序中,我正在创建请求对象
request = Rack::Request.new(env)
我期待POST数据将以params hash
request.params => should be a normal hash
但不知何故,这不太正确。我有这种格式的参数
{{"device":{"username":"123456","name":"some name","location":"Hidden"}}=>nil}
所以我需要的params数据成为哈希的关键。为什么会这样,以及如何使它像这样正常#/ p>
{"device":{"username":"123456","name":"some name","location":"Hidden"}}
?感谢
答案 0 :(得分:2)
通常-d
期望数据以var=val
格式传递,当您没有通过var
时,它会将您的数据转换为var
并为其分配一个空字符串
当您使用curl
时,您会得到以下参数:
params = {'{"device":{"username":"123456","name":"some name","location":"Hidden"}}'=>nil}
然后你只需将其解析为json:
require 'json'
JSON.parse params.keys.first
=> {"device"=>{"username"=>"123456", "name"=>"some name", "location"=>"Hidden"}}
或者您可以传递这样的参数:
curl -X POST -d 'json={"device":{"username":"123456","name":"some name","location":"Hidden"}}' :9292
然后你会得到以下参数:
params = {'json'=>'{"device":{"username":"123456","name":"some name","location":"Hidden"}}'}
并简单地解析为JSON
:
JSON.parse(params['json'])
#=> {"device"=>{"username"=>"123456", "name"=>"some name", "location"=>"Hidden"}}