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データがハッシュのキーになりました。それはなぜですか、そしてそれをこのように通常のハッシュにする方法

{"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 に答える