这种行为如何与Ruby和HTTParty一起使用?

时间:2013-01-28 19:06:37

标签: ruby httparty

我正在学习Ruby。

我有一些代码使用HTTParty库来下载一些数据。远程服务器未正确定义内容类型,因此不会自动解析响应(作为JSON)。

JSON看起来像这样:

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

在代码中有以下行:

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

如果自动解析响应,则其行为与预期相同,并且将返回原始JSON中的{ .......... }。在未解析的情况下,它返回字符串response,我无法弄清楚为什么会这样做。

HTTParty库的哪个功能导致它返回字符串response? 在尝试访问['response']时,导致纯文本数据的不同请求返回Nil。

1 个答案:

答案 0 :(得分:1)

这就是我现在理解的方式。 resp['response']尝试在resp对象上调用[]方法,但由于未定义,因此调用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值。