Je vous recommande d'utiliser l'API de yajl-ruby
directement au lieu de l'API de compatibilité de gemme JSON principalement pour la raison que la méthode de gemme JSON to_json
conflit avec ActiveSupport
et a eu des problèmes de longue date les faire fonctionner ensemble.
Si vous faites simplement config.gem 'yajl-ruby', :lib => 'yajl'
à la place, vous devrez utiliser Yajl::Parser
et Yajl::Encoder
directement pour analyser/encoder des objets. L'avantage de ceci est que vous serez certain qu'il n'y aura pas de conflits avec les substitutions de méthode et que votre code de codage/analyse syntaxique JSON fonctionnera comme prévu. L'inconvénient est que si vous utilisez des gemmes qui utilisent la gemme JSON, ils continueront à le faire, mais votre propre code utilisera yajl-ruby.
Si vous le souhaitez, vous pouvez utiliser votre ligne config.gem, puis dans un initialiseur require 'yajl'
pour que les deux API soient chargées. L'include yajl/json_gem
remplacera tout ce qui utilise la gemme JSON avec yajl
- pour s'assurer que cela remplace ces méthodes, essayez de vous assurer que require 'yajl/json_gem'
arrive en dernier.
Si vous utilisez Rails 3, vous pouvez l'ajouter à un initialiseur:
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
Pour faire render :json => ...
vous que les appels utilisent yajl-ruby
aussi bien.
Désolé si ce n'est pas vraiment répondre à votre question, mais je voulais au moins donner la suggestion d'utiliser l'API de yajl-ruby
directement :)
Wow, merci pour une réponse très complète avec beaucoup d'options. Mais je pense vraiment que je ne sais toujours pas comment atteindre # 1 dans ma liste - ayant des rails remarquer yajl-ruby et l'utiliser. :) –
Pour autant que je sache, si vous avez chargé yajl-ruby (et/ou listé dans votre config.gem ou bundler config), Rails 2.3.6+ l'utilisera comme backend JSON par défaut pour l'analyse syntaxique. – brianmario