Rails - 使用json对象创建json数组

时间:2012-12-27 13:07:45

标签: ruby-on-rails json fullcalendar

我需要根据我的数据创建一个json数组。但是在我的数据模型中,一些字段是不必要的,并且需要为json-array更改一些字段名称。 因此,我创建了一个简单的函数将一个对象转换为我需要使用的json格式:

  def testMethod
    {title: self.title, start: self.start_date, end: self.end_date, resource: Resource.find(self.resource_id).name}.to_json
  end

所以这个json对象的输出是:

{:title=>"Test", :start=>Thu, 27 Dec 2012 10:25:00 UTC +00:00, :end=>Thu, 27 Dec 2012 10:25:00 UTC +00:00, :resource=>"Resource1"}

但是当我使用以下循环迭代所有对象时:

@calJson   = []
@calendars.each do |cal|
    @calJson.push(cal.testMethod)
end

我将拥有这个无用的字符串:

  

[ “{\” 标题\ “:\” 测试\ “\ ”启动\“:\ ”2012-12-27T10:25:00Z \“,\ ”端\“:\” 2012-12- 27T10:25:00Z \ “\ ”资源\“:\ ”资源1 \“}”,   “{\” 标题\ “:\” ikincii \ “\ ”启动\“:\ ”2012-12-27T10:25:00Z \“,\ ”端\“:\” 2012-12-27T10:25: 00Z \ “\ ”资源\“:\ ”资源2 \“}”,   “{\”title \“:\”b da   儿子\”,\ “启动\”:\ “2012-12-27T10:27:00Z \”,\ “结束\”:\ “2012-12-27T10:27:00Z \”,\ “资源\”: \ “资源1 \”}“]

虽然我想要这样的东西:

  

[                 {                     标题:'午餐12.15-14.45',                     开始:新日期(y,m,d,12,15),                     结束:新日期(y,m,d,14,45),

              resource: 'resource1'
          },              
          {
              title: 'Meeting',
              start: new Date(y, m, d, 10, 30),
              end: new Date(y, m, d+4, 11, 00),

              resource: 'resource1'
          } ]

我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:1)

尝试将此添加到相应的控制器:

respond_to do |format|
  format.html
  format.js { render json: @events }
end

另外,在我的Event模型中,我用这个覆盖了默认的as_json方法:

def as_json(options = {})
{
  :id => self.id,
  :title => self.name,
  :description => self.description || "",
  :start => starts_at.rfc822,
  :end => ends_at.rfc822,
  :allDay => self.all_day
}
end

答案 1 :(得分:1)

直接回答你的问题:

 def testMethod
  {title: self.title, start: self.start_date, end: self.end_date, resource: Resource.find(self.resource_id).name}
 end

 @calJson = @calendars.each_with_object([]) {|cal, array| array << cal.testMethod }.to_json

但是你有更好的选择:json建设者致力于这类任务。