问题描述
我想在从数据库中获取数据时生成一个JSON对象。
def duration
return @data[:duration] unless @data[:duration].nil?
@data[:duration] = per_hour.collect do | val |
[val[0], val[1]]
end
end
我得到了我需要的数据,但是数组不正确。 我的看法如下:
var array = <%= raw @duration_data.to_json %>;
我的数组如下所示:
var array = [{"data": [[0,0],[1,60.0]] }];
但是我需要的是:
var array = [{"data": {"0":0, "1":60.0} }];
1楼
您只需要将数组转换为哈希即可:
@data[:duration] = per_hour.collect do |val|
[val[0], val[1]]
end.to_h
对于Ruby 1.9:
@data[:duration] = Hash[*per_hour.collect { |val| [val[0], val[1]] }]
2楼
我会这样写:
def duration
@data[:duration] ||= build_duration
end
这是一种简短的说法:如果不是nil,则返回@data[:duration]
,否则,将build_duration
分配给它。
然后定义build_duration
def build_duration
result = {}
per_hour.each do |val|
result[val[0]] = val[1]
end
result
end
您可以编写更紧凑的build_duration
,但是对我来说,这是很build_duration
:它将构建一个哈希并根据需要填充它。
3楼
@data[:duration] ||= per_hour.collect { | val | [val[0], val[1]] }.to_h
尝试这个。