0

我正在请求机架应用程序

curl -X POST -d '{"device":{"username":"123456","name":"some name","location":"Hidden"}}' http://localhost:9292/device

在机架应用程序中,我正在创建请求对象

request = Rack::Request.new(env)

而且我希望 POST 数据将在 params 散列中

request.params => should be a normal hash

但不知何故,它并不完全正确。我有这种格式的参数

{{"device":{"username":"123456","name":"some name","location":"Hidden"}}=>nil}

所以我需要的params数据就变成了hash的key。为什么会这样以及如何使它像这样正常哈希

{"device":{"username":"123456","name":"some name","location":"Hidden"}}

? 谢谢

4

1 回答 1

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"}}
于 2012-11-18T15:45:54.497 回答