Ruby + JSON + Regexp

时间:2010-08-13 18:58:52

标签: ruby-on-rails ruby regex json

我正在研究一个RoR项目,我正在将一个JSON对象传递给一个脚本。具体来说,是jquery日历的事件列表。

首先,我从活动记录中获取必要的事件并将它们转换为json:

@events = CalendarEvent.find(:all, :conditions => ["mentor_id = ?", current_user]).to_json(:only => [:id, :availability, :starts_at, :ends_at])

返回以下内容:

[{"calendar_event":{"starts_at":"2010-08-14T17:15:00Z","id":1,"availability":true,"ends_at":"2010-08-14T17:45:00Z"}},
 {"calendar_event":{"starts_at":"2010-08-15T15:45:00Z","id":2,"availability":true,"ends_at":"2010-08-15T16:15:00Z"}},
 ...]

但是,我遇到了问题,因为脚本需要以下格式:

[{"starts_at":"2010-08-14T17:15:00Z","id":1,"availability":true,"ends_at":"2010-08-14T17:45:00Z"},
 {"starts_at":"2010-08-15T15:45:00Z","id":2,"availability":true,"ends_at":"2010-08-15T16:15:00Z"},
 ...]

起初我认为从单独的哈希中弹出值并返回一个填充了这些值的数组是一件简单的事情。但是,似乎数组中的所有内容都是一个大字符串。所以我试图使用正则表达式来获取必要的东西。我最好的镜头是:

@json = @events.scan(/\[\{\"calendar_event\":(\{.*\})\}\]*/)

但这会返回以下形式:

[["{\"starts_at\":\"2010-08-14T17:15:00Z\",\"id\":1,\"availability\":true,\"ends_at\":\"2010-08-14T17:45:00Z\"}},{\"calendar_event\":{\"starts_at\":\"2010-08-15T15:45:00Z\",\"id\":2,\"availability\":true,\"ends_at\":\"2010-08-15T16:15:00Z\"}},..."]]

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

ActiveRecord::Base.include_root_in_json = false

玩得开心。

Reading documentation helps.