7

私はrubyアプリケーションを持っており、クライアントからJSONを受け取る必要があります。JSONを受信することは、文字列を受信することと同じですか?私はただ次のようなことをしなければなりません:

information = params[:json_data]
data_parsed = JSON.parse(information)

それだけですか、それともJSONを取得するときに何か別のことをしなければなりませんか?送信者は私にそのような文字列を送信する必要がありますか?

ありがとう!

4

2 に答える 2

24

あなたが説明していることはOKですが、それはという名前のパラメータがあることを意味しjson_dataます。代わりに、POST全身がに他ならないことを意味する場合はJSON、を確認する必要がありますrequest.raw_post。あなたはこのようなものになってしまうでしょう:

information = request.raw_post
data_parsed = JSON.parse(information)
于 2012-09-01T02:35:19.400 に答える
15

公式文書によると、

リクエストの「Content-Type」ヘッダーが「application/json」に設定されている場合、Railsはパラメータをparamsハッシュに自動的にロードします。これには、通常どおりにアクセスできます。

たとえば、このJSONコンテンツを送信する場合は次のようになります。

{ "company": { "name": "acme", "address": "123 Carrot Street" } }

コントローラはとparams[:company]して受け取ります{ "name" => "acme", "address" => "123 Carrot Street" }

config.wrap_parametersまた、イニシャライザーでオンにした場合、またはwrap_parametersコントローラーで呼び出した場合は、JSONパラメーターのルート要素を安全に省略できます。この場合、パラメーターは複製され、コントローラーの名前に基づいて選択されたキーでラップされます。したがって、上記のJSONPOSTは次のように記述できます。

{ "name": "acme", "address": "123 Carrot Street" }

そして、CompaniesControllerにデータを送信すると仮定すると、データは次のように:companyキー内にラップされます。

{ name: "acme", address: "123 Carrot Street", company: { name: "acme", address: "123 Carrot Street" } }

したがって、に/ POST{ "hello": "world"}を送信するとapples/params['apple']はJsonペイロードのオブジェクトになります。

class ApplesController < ApplicationController
  def create
    # params['apple'] is the object represents Json payload
  end
end
于 2016-08-29T13:21:07.380 に答える