我想从一些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