5

私はこのカールコールを持っています:

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

4

2 に答える 2

18

実際には、JSONオブジェクトの代わりにRubyハッシュを渡しています。

curlコマンドを次のように更新します。

-d '{"name":"abc","orgid":"12","subject":"my subject"}'

次に、シナトラのアクションで次のようにします。

params = JSON.parse(request.env["rack.input"].read)

あなたを確認してくださいrequire 'json'

于 2012-12-03T00:27:24.937 に答える
0

使用する

require 'json'
params = JSON.parse(request.body.read)
于 2017-11-24T09:06:25.013 に答える