-1

我正在学习红宝石。

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

JSON 看起来像这样:

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

在代码中是以下行:

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

在自动解析响应的情况下,这将按预期运行,并且{ .......... }将从原始 JSON 返回。如果它没有被解析,它会返回字符串response,我不知道为什么会这样。

HTTParty 库的哪个特性导致它返回字符串response?另一个导致纯文本数据的请求在尝试访问时返回 Nil ['response']

4

1 回答 1

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值。

于 2013-01-28T19:56:27.410 回答