2014-03-02 95 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