Я бы порекомендовал использовать API yajl-ruby
напрямую вместо API совместимости с гемами JSON, главным образом по той причине, что метод to_json
драгоценного камня JSON конфликтует с ActiveSupport
и имеет давние проблемы, заставляющие их работать вместе.
Если вы просто вместо этого сделаете config.gem 'yajl-ruby', :lib => 'yajl'
, вам нужно будет использовать Yajl::Parser
и Yajl::Encoder
напрямую для анализа / кодирования объектов.Преимущество этого заключается в том, что вы будете уверены, что не будет никаких конфликтов с переопределениями методов, и поэтому гарантированно будет работать код кодирования / синтаксического анализа JSON.Недостатком является то, что если вы используете какие-либо гемы, которые используют гем JSON, они будут продолжать это делать, но ваш собственный код будет использовать yajl-ruby.
Если вы хотите, вы можете использовать свойСтрока config.gem, затем в инициализаторе require 'yajl'
, чтобы вы загрузили оба API.yajl/json_gem
include будет переопределять все, что использует гем 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 напрямую:)