我有以下問題。 Web服務正在向我的應用發送JSON POST請求,我想解析它。如何在Rails中解析傳入的POST請求的json?
我以爲我只是可以
@var = params[:name_of_the_JSON_fields]
訪問PARAMS,但它不工作。我在我的Heroku日誌中看到,請求已完成,參數在那裏,但我無法存儲它們。
有沒有人有想法?
我有以下問題。 Web服務正在向我的應用發送JSON POST請求,我想解析它。如何在Rails中解析傳入的POST請求的json?
我以爲我只是可以
@var = params[:name_of_the_JSON_fields]
訪問PARAMS,但它不工作。我在我的Heroku日誌中看到,請求已完成,參數在那裏,但我無法存儲它們。
有沒有人有想法?
當你發佈JSON(或XML)時,rails會爲你處理所有的解析,但你需要包含正確的頭文件。
讓你的應用程序包括:
Content-type: application/json
而且都將是很酷。
如果您在params哈希表接收JSON,你可以自己進行轉換:
@var = JSON.parse(params[:name_of_the_JSON_fields])
可能爲時已晚,以幫助你,但也許將來人們會檢測:)也許Rails是應該解析的JSON你,但這從來沒有爲我工作。我直接閱讀請求主體。我使用'Yajl'json解析器 - 它非常快速。但是普通的舊「JSON」將在這裏工作過(只需使用JSON.parse)
request.body.rewind
body = Yajl::Parser.parse request.body.read.html_safe
這個答案可能不是特別就這個問題詢問,但建立AWS SNS推送通知時,我也有類似的問題。我無法解析甚至查看初始訂閱請求。希望這可以幫助有類似問題的其他人。
我發現你並不需要解析,如果你有設置爲JSON默認格式,類似於一個簡單的API建立以下(在配置/ routes.rb中):
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格式,您可以撥打以下電話:
request.body.read()
對不起,我不理解它。你能更具體一點嗎?我不想發佈JSON。 Web服務通過POST請求訪問我的應用程序,我只想從該請求獲取數據,然後解析它。 – thomas8877 2010-12-05 19:16:55
@ thomas8877它沒有被解析,因爲Web服務沒有使用正確的內容類型。如果你不能使用「application/json」,那麼你必須將另一個內容類型與json關聯起來,這樣Rails纔會明白它需要解析它。 – 2010-12-06 00:34:14