0

Rails 3アプリケーションがあり、次のコードを使用してJSON投稿を解析しています。

email_payload = JSON.parse(params[:payload])
Result.create(:from => email_payload['from'], :from_name => email_payload['from_name'], :from_address => email_payload['from_address'], :date => email_payload['date'], :html_body => email_payload['html_body'], :priority => email_payload['priority'], :spam_status => email_payload['spam_status'], :subject => email_payload['subject'])

JSON投稿データは次のとおりです。

payload{ "address_identifier": null, "attachments": [ [ "twitter.png", "image/png", 3029, "http://api.deliverhq.com/api/incoming/attachment/7gdd71wo75/5772412/0" ] ], "cc": null, "date": "Thu, 25 Oct 2012 22:04:20 +0100"

この場合、URLを解析しhttp://api.deliverhq.com/api/incoming/attachment/7gdd71wo75/5772412/0て、データベースにURLを入力する方法を見つけようとしています。

:url => email_payload['attachments']

添付ファイル内に複数の値があるため、機能しません。

email_attachments_payload = JSON.parse(params[:payload][:attachments])
:url => email_attachments_payload['URL']

URLに識別子がないため、機能しません。この特定のアプリケーションでは、添付ファイルは1つだけである必要があるため、可能であれば.firstを選択することもできます。

どんなポインタでもいただければ幸いです!

アップデート:

追加:

email_payload[:attachments][0][4]

次の例外エラーが発生します。

NoMethodError: undefined method []' for nil:NilClass

更新2

def receive_fax
    if request.get?
        render :text => "hello"
    elsif request.post?   
      email_payload = JSON.parse(params[:payload])     
      Fax.create(:from => email_payload['from'], :from_name => email_payload['from_name'], :from_address => email_payload['from_address'], :date => email_payload['date'], :html_body => email_payload['html_body'], :priority => email_payload['priority'], :spam_status => email_payload['spam_status'], :subject => email_payload['subject'], :fax => email_payload[:attachments][0][3])
      render :text => "success"
    else
      render :text => "error"
    end
  end
4

2 に答える 2

2

irbで:

require 'json'

email_payload = JSON.parse('{ "address_identifier": null, "attachments": [ [ "twitter.png", "image/png", 3029, "http://api.deliverhq.com/api/incoming/attachment/7gdd71wo75/5772412/0" ] ], "cc": null, "date": "Thu, 25 Oct 2012 22:04:20 +0100" }')
#=> {"address_identifier"=>nil, "attachments"=>[["twitter.png", "image/png", 3029, "http://api.deliverhq.com/api/incoming/attachment/7gdd71wo75/5772412/0"]], "cc"=>nil, "date"=>"Thu, 25 Oct 2012 22:04:20 +0100"}
email_payload['attachments'][0][3]
#=> "http://api.deliverhq.com/api/incoming/attachment/7gdd71wo75/5772412/0"

それがうまくいかない場合は、上記で説明していないことが起こっています。

更新:から返されるハッシュではJSON.parseattachmentsキーは'attachments'記号()ではなく文字列()である必要があります:attachments。上記の私の答えを更新しました。

于 2012-10-28T14:05:29.810 に答える
1

試してみてください:email_payload ['attachments'] [0] [3]

問題は:attachments(シンボル)と'attachments'(文字列)の違いにあるようです。

于 2012-10-28T14:36:30.063 に答える