从OpenStruct Ruby对象中提取值

时间:2013-01-14 06:43:05

标签: ruby data-structures

我返回了以下Ruby对象(使用garb gem从查询到Google AnalyticsAPI,来自README.md上显示的示例调用,Exits.results(profile, :filters => {:page_path.eql => '/'})

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

我要提取网页浏览量值(10440),但无法弄清楚如何操作。我看到我的对象data.results是长度为array的类1,但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解析,这似乎是 crazy 。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

请试试这个:

data.first.pageviews