-1

私はRubyを学んでいます。

HTTPartyライブラリを使用してデータをダウンロードするコードがあります。リモートサーバーはコンテンツタイプを正しく定義していないため、応答は(JSONとして)自動的に解析されません。

JSONは次のようになります。

{"response":{ ............ }}

コードには次の行があります。

if resp['response'] == 'response'

応答が自動的に解析される場合、これは期待どおりに動作し{ .......... }、元のJSONから返されます。解析されていない場合は文字列が返さresponseれ、なぜそれが行われるのか理解できません。

HTTPartyライブラリのどの機能により、文字列が返されますresponseか?プレーンテキストデータを生成する別のリクエストは、にアクセスしようとするとNilを返します['response']

4

1 に答える 1

1

これが私が今それを理解している方法です。respオブジェクトのメソッドを呼び出そうとしますが、これは定義されていないため、メソッドresp['response']が呼び出されます[]method_missing

# the method_missing from HTTParty::Response
def method_missing(name, *args, &block)
  if parsed_response.respond_to?(name)
    $stdout.puts parsed_response.class.inspect
    $stdout.puts parsed_response.inspect
    parsed_response.send(name, *args, &block)
  elsif response.respond_to?(name)
    response.send(name, *args, &block)
  else
    super
  end
end

JSONが解析されない場合、parsed_responseは実際には文字列です。RubyのStringクラスは、引数の[]ような文字列が与えられたときresponseに同じ文字列が返されるように定義していますが、それが文字列全体に存在する場合に限ります。

JSON文字列に値が含まれてい"response"たため、response値が返されました。

于 2013-01-28T19:56:27.410 に答える