2010-12-05 3 views
14

私は以下の問題があります。 WebサービスがJSON POSTリクエストをアプリケーションに送信していて、解析する必要があります。Railsで入ってくるPOSTリクエストのjsonを解析するには?

私はちょうど

@var = params[:name_of_the_JSON_fields] 

でのparamsにアクセスすることができますが、それは動作しませんと思いました。私はHerokuのログに、リクエストが完了し、パラメータがそこにあることがわかりますが、私はちょうどそれらを保存できません。

アイデアはありますか?

答えて

21

JSON(またはXML)を投稿すると、すべての解析が処理されますが、正しいヘッダーを含める必要があります。

あなたのアプリを持っているが含まれます:

Content-type: application/json 

そして、すべてがクールになりますが。あなたはparamsハッシュでJSONを受信して​​いる場合

+0

申し訳ありませんが、わかりません。あなたはもう少し具体的になりますか?私はJSONを投稿したくありません。 WebサービスがPOSTリクエストで私のアプリケーションにアクセスしているので、このリクエストからデータを取得して解析したいだけです。 – thomas8877

+0

@ thomas8877 Webサービスが正しいコンテンツタイプを使用していないため、解析されていません。 "application/json"を使用できない場合は、別のコンテンツタイプをjsonとして関連付ける必要があるため、Railsはそれを解析する必要があると認識します。 –

+0

ありがとうございました!現時点では複雑すぎるので、私はこのWebサービスのことについてもっと知る必要があります。 – thomas8877

9

あなたはそれを自分で変換することができます:おそらく

@var = JSON.parse(params[:name_of_the_JSON_fields]) 
4

あなたを助けるために遅すぎる、おそらく将来の人々がここ:)おそらくのためにJSONを解析することになっているレールをチェックしますあなたは、それは私のために働いたことはありません。リクエストの本文を直接読みました。私は 'Yajl' jsonパーサーを使用しています。非常に高速です。しかし、定期的に古い「JSON」はここにも動作します(ただJSON.parseを使用)

request.body.rewind 
body = Yajl::Parser.parse request.body.read.html_safe 
+0

これは本当に良い解決策ではありません。 request.bodyは、文字セットがEncoding :: BINARYに設定されたStringIOを返します。 アスキー文字以外の文字を渡すと、エンコード例外が発生します – siegy22

+0

バイナリエンコーディングはどのような種類の文字も処理できませんか? – Kevin

+0

いいえ、それはASCII-8Bitを使用し、それをutf8にフォーマットしようとします。理由は分かりません – siegy22

7

この答えは、この正確な質問への特定ではないかもしれないが、AWS SNSのプッシュ通知を設定するとき、私は同様の問題がありました。私は最初の購読要求を解析したり表示することさえできませんでした。うまくいけば、これは似たような問題を抱えている誰かを助けるでしょ

私はあなたが(のconfig/routes.rbを中)以下に似たJSONに設定されたデフォルトのフォーマットでシンプルなAPIのセットアップを、持っている場合に解析する必要がないことが判明:

namespace :api, defaults: {format: :json} do 
    namespace :v1 do 
     post "/controller_name" => 'controller_name#create' 
     get "/controller_name" => 'controller_name#index' 
    end 
    end 

大切なこと私は、受け取った投稿要求が変数requestによってアクセス可能であることを発見しました。これを読みやすいJSON形式に変換するには、次のコードを呼び出します。

関連する問題