Rails需要一个JSON Builder
POSTED AT: 2010-06-11 07:07:16 UTC |
POSTED IN: Ruby/Rails |
2 COMMENTS
说过要写tutorials的,我却发现自己写的东西越来越中国化了,就是很装逼却没实际价值,高手不屑一看,新手看不懂的境界。
于是,我决定以后写的詳細一点。不过在我如此混乱的文字组织下,可能就找不到重点了
我有很多的events,想返回JSON格式,只需要这样写
class EventsController < ApplicationController respond_to :json def index respond_with(@events) end end
Rails很智能,它会自动的使用@events.to_json来返回JSON,大部分时间这就是我想要的,可现在问题出现了。。。
我不喜欢默认的这个JSON,比如我需要给这个JSON加一个值"total":69。如果是XML格式,Rails提供了Builder,可我没找到比较方便的JSON Builder
针对现在小小的需求,可以这样做
respond_with(@events) do |format| format.json { events_hash = Hash.from_xml(@events.to_xml).merge('total' => 69) render :json => ActiveSupport::JSON.encode(events_hash), :layout => false } end
如果你需要的JSON格式很非主流呢?没关系,你已经注意到上面使用的Hash.from_xml了,于是我们使用XML Builder来构建一个XML
xml.instruct! xml.events do @events.each do |event| xml.event { xml.name event.name } end end
现在一个超级简约的JSON就要构建完毕了
events_hash = Hash.from_xml(render_to_string(:template => 'events/index.xml.builder', :layout => false))
嗯,就这样
本文基于 署名-非商业性使用-禁止演绎 2.5 中国大陆 发布
2 COMMENTS >>LEAVE<<
-
俺是新新手还是看不懂
-
这是我的解决办法, 基于你的方法, 有些不同
class ActiveRecord::Base
# so we can do something like
# user[:books] = user.books
# user.to_json2 will have books data
def to_json2
h = Hash.from_xml(self.to_xml)
h.to_json
end
end