代码之家  ›  专栏  ›  技术社区  ›  John Bachir

在我的Rails项目中使用Yajl Ruby的最佳方法是什么?

  •  2
  • John Bachir  · 技术社区  · 16 年前

    Rails2.3.6开始使用新的快速JSON库, yajl-ruby , "if available" .

    在yajl ruby自述的“json gem compatibility api”部分中,它概述了一种方法,只需加入yajl ruby inclusion,让应用程序的其余部分无缝地获取它。

    所以,理想情况下,我想

    1. 使用Rails
    2. 我的宝石用它
    3. 使用它的应用程序代码

    最简单的方法是什么?我猜想:

    config.gem 'yajl-ruby', :lib => 'yajl/json_gem'
    

    作为environment.rb中的第一块宝石。这样做并不会导致任何错误,但我不知道如何知道Rails是否会将它作为自己的用途。

    谢谢! 约翰

    1 回复  |  直到 15 年前
        1
  •  8
  •   John Bachir    15 年前

    我建议使用 yajl-ruby 直接代替json gem兼容性api的原因主要是json gem 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 include将覆盖使用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 => ... 调用使用 雅依尔红宝石 也。

    对不起,如果这不是真的回答你的问题,但我想至少给出使用的建议 雅依尔红宝石 's api直接:)