2013-01-14 42 views
3

我得到了下面的Ruby对象返回一个值(从查询使用garb gem的谷歌Analytics(分析)API,来自于README.md有显示的示例通话,Exits.results(profile, :filters => {:page_path.eql => '/'})提取从OpenStruct Ruby对象

> data.results 
=> [#<OpenStruct page_path="/", exits="3706", pageviews="10440">] 

我想提取浏览量值(10440),但无法弄清楚如何去做。我看到我的对象,data.results是长度1array类,但data.first是OpenStruct类带有返回值,看起来几乎相同:

irb(main):140:0> data.results.class 
=> Array 
irb(main):141:0> data.results.length 
=> 1 
irb(main):142:0> data.first 
=> #<OpenStruct page_path="/", exits="3706", pageviews="10440"> 
irb(main):143:0> data.first.class 
=> OpenStruct 

data本身似乎是一个被称为ResultsSet自定义的返回类型:

irb(main):144:0> data.class 
=> Garb::ResultSet 
irb(main):145:0> data 
=> #<Garb::ResultSet:0x00000002411070 @results=[#<OpenStruct page_path="/", exits="3706", pageviews="10440">], @total_results=1, @sampled=false> 
irb(main):146:0> 

很多数据结构,但不知道如何得到我想要的值。我收集OpenStruct是有关哈希,所以我想data.first["pageviews"]会做到这一点,

NoMethodError: undefined method `[]' for #<OpenStruct page_path="/", exits="3706", pageviews="10440"> 
    from (irb):146 
    from /usr/bin/irb:12:in `<main>' 

同时data.first.keys回报nil。 。?不知道如何让我的数据出来,(短长度-1磁盘阵列,data.results转换为字符串,并使用grep,这似乎疯狂解析的任何想法

回答

3

请试试这个:

data.first.pageviews 
+0

是的,工作!非常感谢。不知道我完全理解逻辑,但非常有帮助! – cynewulf

+0

这是一个功能,改变了红宝石1.9什么? – chicks

+0

它不应该... – Yossi