2014-03-02 62 views
15

我想从reddit的API迭代解析的JSON响应。Ruby - 遍历解析的JSON

我已经做了一些谷歌搜索,似乎其他人有这个问题,但没有一种解决方案似乎为我工作。 Ruby正在将['data] ['children]当作索引来处理,这就是导致错误的原因,但我只是试图从JSON中获取这些值。有什么建议?

我的代码:

require "net/http" 
require "uri" 
require "json" 

uri = URI.parse("http://www.reddit.com/user/brain_poop/comments/.json") 

response = Net::HTTP.get_response(uri) 

data = JSON.parse(response.body) 

data.each do |child| 
    print child['data']['body'] 
end 

该错误消息我在终点站下车:

api-reddit-ruby.rb:12:in `[]': no implicit conversion of String into Integer (TypeError) 
from api-reddit-ruby.rb:12:in `block in <main>' 
from api-reddit-ruby.rb:11:in `each' 
from api-reddit-ruby.rb:11:in `<main>' 

回答

22

你试图遍历data,这是一个哈希,而不是一个列表。你需要通过data['data']['children']

require "net/http" 
require "uri" 
require "json" 

uri = URI.parse("http://www.reddit.com/user/brain_poop/comments/.json") 

response = Net::HTTP.get_response(uri) 

data = JSON.parse(response.body) 


data['data']['children'].each do |child| 
    puts child['data']['body'] 
end 
+0

得到你的JSON对象的子数组啊,这是有道理的,现在它的工作原理。谢谢。 – 2bor02b