当前位置: 代码迷 >> JavaScript >> Rails生成JSON对象
  详细解决方案

Rails生成JSON对象

热度:47   发布时间:2023-06-07 17:53:05.0

我想在从数据库中获取数据时生成一个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} }];

您只需要将数组转换为哈希即可:

@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]] }]

我会这样写:

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 :它将构建一个哈希并根据需要填充它。

@data[:duration] ||= per_hour.collect { | val | [val[0], val[1]] }.to_h

尝试这个。

  相关解决方案