我想在从数据库中获取数据时生成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} }];
答案 0 :(得分:2)
您只需将数组转换为哈希:
@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]] }]
答案 1 :(得分:1)
我会写如下:
def duration
@data[:duration] ||= build_duration
end
这是一个简短的说法:如果不是,则返回@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
更紧凑,但对我来说这是非常易读的:它会构建一个哈希并按你的意愿填写它。
答案 2 :(得分:1)
@data[:duration] ||= per_hour.collect { | val | [val[0], val[1]] }.to_h
试试这个。