2011-11-17 113 views
12

我使用HTTParty拉的Facebook用户的书单,但我无法解析响应:解析HTTParty响应

的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解析那变成一个红宝石物体。我试过类似的东西(其中ret是响应)ret.parsed_response并且返回数据数组,但实际上访问里面的项返回一个找不到方法的错误。

这是什么HTTParty实际返回的样本:

#<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"}, 
+1

你是这样想'ret.parsed_response [“data”]'和'ret.parsed_response [“data”]。first [“name”]'? – rubyprince

+1

不......我在做'ret.parsed_response.data' – Slick23

回答

29

你有任何代码抛出一个错误?来自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 
+1

这是我的麻烦 - 使用'data'就像你在这里完成的那样。谢谢! – Slick23

+0

没问题,祝你好运! –

+1

完美谢谢!这帮了我很多! –

7

只是一个额外的信息 - 它并不总是默认的JSON响应

HTTParty的result.response.bodyresult.response.parsed_response总是有哈希

的形式,它只是一般取决于其使用的是在您的请求头。 例如,,您需要指定Accept标头,其值为application/json,同时打到GitHub API,否则它仅返回为字符串

然后,您必须使用JSON.parse(data)来将字符串响应转换为哈希对象。