解析HTTParty响应
我正在使用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
并返回数据数组,但实际访问里面的项目会返回找不到方法的错误。
这是HTTParty实际返回的示例:
#[{"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"},
你有任何抛出错误的代码吗? 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
只是一个额外的信息 – 它不总是一个默认的JSON响应
HTTParty的result.response.body
或result.response.parsed_response
并不总是具有哈希的forms
它通常取决于您在请求中使用的标头。 例如 ,您需要在使用GitHub API时指定带有application/json
值的Accept
标头,否则它只是以字符串forms返回。
然后你必须使用JSON.parse(data)
来将字符串响应转换为Hash对象。