从json数据Rails计数



我想从一些json数据中计数,但它正在输出:

[0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]

查看

<%= @overall %>

其中1大于40。而不是"2"。

json数据的格式为来自url:

{"status": "ok", "data": [{"2014-06-16": 32.1},{"2014-06-17": 30.2},{"2014-06-18": 42.9}]} etc

控制器

@data = JSON.parse(open(@temperature.url).read)
@overall = []
    @data['data'].each do |data|
      dates << data.keys
      temps << data.values
      @overall << data.values.count { |i| i > 40 }
    end

由于JSON data:是一个数组,我假设多个日期由多个哈希表示(每天一个(。这是正确的吗?

{"status": "ok", "data": [{"2014-06-16": 42.1}, {"2014-06-17": 45.5}]

如果是这样的话,这应该有效:

@data = JSON.parse(open(@temperature.url).read)
dates = @data['data'].map {|data| data.keys.first}
temps = @data['data'].map {|data| data.values.first}
@overall = temps.count {|temp| temp > 40}

好的-这将解决问题

@data = JSON.parse(open(@temperature.url).read)
@overall = []
@data['data'].each do |data|
  dates << data.keys
  temps << data.values
end

forty_count = temps.flatten.count {|i| i > 40 }

上面代码的问题是你不能在飞行中进行计数。。。只有当你达到全套温度时,你才能计数——只有当你到达终点时,才会发生这种情况。

此外,您将"data.values"添加到temps数组的方式,使其成为一个数组数组,如果您这样做,您可以看到:

data = [{"2014-06-16" => 32.1},{"2014-06-17" => 30.2},{"2014-06-18" => 42.9}] 
data.each do |data|
  temps << data.values 
end 
puts temps.inspect  #  [[32.1], [30.2], [42.9]]
puts temps.flatten.inspect  #  [32.1, 30.2, 42.9]
temps.count {|i| i > 40 }         # explodes!
temps.flatten.count {|i| i > 40 } # 1

相关内容

  • 没有找到相关文章

最新更新