我建议yajl-ruby
直接使用 's API 而不是 JSON gem 兼容性 API,主要是因为 JSON gem 的方法与 JSON gem 的to_json
方法冲突ActiveSupport
并且长期存在使它们一起工作的问题。
如果您只是这样做config.gem 'yajl-ruby', :lib => 'yajl'
,则需要使用Yajl::Parser
andYajl::Encoder
直接解析/编码对象。这样做的好处是您可以确定不会与方法覆盖发生任何冲突,因此可以保证您的 JSON 编码/解析代码将按预期工作。缺点是如果您使用任何使用 JSON gem 的 gem,他们会继续这样做,但您自己的代码将使用 yajl-ruby。
如果您愿意,您可以使用 config.gem 行,然后在初始化程序中require 'yajl'
,这样您就可以加载两个 API。yajl/json_gem
包含将覆盖任何使用 JSON gem 的东西-yajl
以确保覆盖这些方法尝试确保require 'yajl/json_gem'
最后发生。
如果您使用的是 Rails 3,则可以将其添加到初始化程序中:
ActionController::Renderers.add :json do |json, options|
json = Yajl.dump(json) unless json.respond_to?(:to_str)
json = "#{options[:callback]}(#{json})" unless options[:callback].blank?
self.content_type ||= Mime::JSON
self.response_body = json
end
确保render :json => ...
通话也能使用yajl-ruby
。
抱歉,如果这并没有真正回答您的问题,但我想至少给出yajl-ruby
直接使用 API 的建议:)