ruby 正在解析HTTParty响应

xdyibdwo  于 2023-02-08  发布在  Ruby
关注(0)|答案(2)|浏览(137)

我正在使用HTTParty拉取一个Facebook用户的图书列表,但我在解析响应时遇到了麻烦:
Facebook返回数据的方式如下:

{
  "data": [
    {
      "name": "Title", 
      "category": "Book", 
      "id": "21192118877902", 
      "created_time": "2011-11-11T20:50:47+0000"
    }, 
    {
      "name": "Title 2", 
      "category": "Book", 
      "id": "1886126860176", 
      "created_time": "2011-11-05T02:35:56+0000"
    },

HTTParty把它解析成一个ruby对象,我试过类似这样的方法(ret是响应)ret.parsed_response,它返回数据数组,但是实际访问里面的项时,返回一个找不到方法的错误。
下面是HTTTparty实际返回的示例:

#<HTTParty::Response:0x7fd0d378c188 @parsed_response={"data"=>
[{"name"=>"Title", "category"=>"Book", "id"=>"21192111877902", "created_time"=>"2011-11-11T20:50:47+0000"},
 {"name"=>"Title 2", "category"=>"Book", "id"=>"1886126860176", "created_time"=>"2011-11-05T02:35:56+0000"},
 {"name"=>"Thought Patterns", "category"=>"Book", "id"=>"109129539157186", "created_time"=>"2011-10-27T00:00:16+0000"},
wtlkbnrh

wtlkbnrh1#

您是否有任何代码抛出错误?HTTParty响应中的parsed_response变量是一个散列,而不是数组。它包含一个键"data"(字符串,而不是符号)。散列中"data"键的值是一个散列数组,因此您可以按如下方式进行迭代:

data = ret.parsed_response["data"]
data.each do |item|
  puts item["name"]
  puts item["category"]
  puts item["id"]
  # etc
end
j5fpnvbx

j5fpnvbx2#

只是一个附加信息-它并不总是默认的JSON响应
HTTParty的result.response.bodyresult.response.parsed_response总是具有哈希的形式
这通常取决于您在请求中使用的头文件。例如,对于,您需要在点击GitHub API时使用application/json值指定Accept头文件,否则它只会返回string
然后,您必须使用JSON.parse(data) for same将字符串响应转换为哈希对象。

相关问题