我推薦使用yajl-ruby
的API,而不是直接的JSON寶石兼容性API主要針對的是JSON寶石的to_json
法ActiveSupport
,並曾長期衝突等問題使得他們一起工作的原因。
如果您只是使用config.gem 'yajl-ruby', :lib => 'yajl'
而不是直接使用Yajl::Parser
和Yajl::Encoder
來解析/編碼對象。這樣做的好處是你可以肯定不會與方法覆蓋發生任何衝突,因此,保證你的JSON編碼/解析代碼將按預期工作。 缺點是如果你使用任何使用JSON gem的gem,他們會繼續這樣做,但你自己的代碼將使用yajl-ruby。
如果你想,你可以使用你的config.gem行,然後在初始化程序require 'yajl'
,所以你會有兩個API加載。 yajl/json_gem
包括將覆蓋任何使用JSON寶石的東西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直接:)
哇,感謝了很多的選項非常全面的答案的建議。但我實際上認爲我還不知道如何在列表中實現#1 - 使用rails注意yajl-ruby並使用它。 :) – 2010-06-19 11:51:43
據我所知,如果您已經加載了yajl-ruby(和/或在您的config.gem或bundler配置中列出),Rails 2.3.6+將使用它作爲解析的默認JSON後端。 – brianmario 2010-06-20 07:49:13