我正在使用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将其解析成一个拼音对象。我尝试过这样的方法(其中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"}, 发布于 2011-11-18 01:54:59
你是否有任何抛出错误的代码?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发布于 2016-05-24 19:19:44
这只是一个额外的信息-它并不总是一个默认的JSON响应
HTTParty的result.response.body或result.response.parsed_response是否始终具有散列的形式
这通常取决于您在请求中使用的标头。例如对于,您需要在命中GitHub接口时指定带有application/json值的Accept header,否则它将简单地返回string。
然后,您必须使用JSON.parse(data)来将字符串响应转换为Hash对象。
https://stackoverflow.com/questions/8171881
复制相似问题