う対応しようと考えておられるのは、紛争の間にActiveSupport::JSONのJSON逸品?

StackOverflow https://stackoverflow.com/questions/683989

質問

私stumpedこの問題です。

ActiveSupport::JSON 定義 to_json プレシジョンは、さまざまなコア物などのJSONの逸品です。●しかし、実は同じでないのActiveSupport版かの引数のJSON逸品版は来ない。

インストールして使ってい逸品に必要なJSONの逸品は、私のアプリ。の問題は私が使っている to_json にコントローラーを返すリストオブジェクトしていきたいと思っていを制御する属性が返されます。

時コードのどこでも私のシステムは require 'json' 私はこのエラーメッセージ:

TypeError: wrong argument type Hash (expected Data)

いろいろとカップルのものがオンライン修理してくださいがあります。その結書きの逸品を使用 ActiveSupport::JSON.decode の代わりに JSON.parse.

この作品にな持続可能な---私はできない分岐ジェム毎に時間を使いたい逸品を必要とするJSONの逸品。

更新: 最も優れた解決策をこの問題はアップグレードレール2.3以上、固定します。

役に立ちましたか?

解決

更新 この修正のみに適用レール < 2.3.としてジャイルズつ以下で固定す2.3内部で用して下さい。でも注意をjson逸品の前の試みでレールの互換性 (json/add/rails), を必要な場合は明示的に決めました。

いよろしくお願いしま require 'json' 計算書そのものを挙げる例外?い意味を呼び出すときは @something.to_json(:something => value) のエラー?後者は何を参考にして設定した場合、問題のために必要なJSONの逸品をお使いいただくことによって生中継します。

ったこの問題のoauthによる逸品。私の場合、あな紛争では、oauthいた時間はほとんどありませんでよ to_json 実装されます。そのための問題は、JSONには気をつかうのActiveSupport宣言も行いました。私は解決するだけで必要なjson前ActiveSupportけ取れないことがあります。入

require 'json'

内部の Rails::Initializer かったのかもその後のブロックしなかった).

こActiveSupportにclobberのデフォルトはJSONの実装です。

現在ご利用の場合の逸品が実際にはJSONの実施 to_json そこで、クリークがあります。この最悪のメタプログラミングとして提唱のためのレールやJSONの逸品開発者は紛争解決ができ苦しいのではの解放後退に対応しています。

短期的には、逸品の作者はできるのを支援するの両方の実装方法です。これにより以下の実現可能なように、逸品用の研究"に関するお問合せ最悪の場合シナリオが公式フォーク(ie. gemgem-rails).

他のヒント

更新:でもレール3.2、同じ問題があることに固定化されていない.の手にハックを強制的に負荷のjson逸品を上書きすることです。

のような以下のコードは、完全にバイパスActiveSupportの to_json ます。に入れて config/initializers/patches.rb,などをすることができます {}.jsonize または [].jsonize をJSON文字列になります。な紛争である。

# Undo the effect of 'active_support/core_ext/object/to_json'
require 'json'
[Object, Array, Hash].each do |klass|
  klass.class_eval <<-RUBY, __FILE__, __LINE__
    def jsonize(options = nil)
      ::JSON.generate self, :quirks_mode => true
    end
  RUBY
end

8つのラインのコードをアプリ 50回 高速化のためのJSONエンコーディングです。だいたい同じです。:)


私はやっているので同様の問題までレール2.3.8.

問題は ActiveSupport::JSON.backend = 'JSONGem' は武骨感丸出しでエ溶液ば上書き一部のエンコーダです。(警告:のためのレールを3.xを使用するMultiJsonが必要です ActiveSupport::JSON.backend = :json_gem 少なくとも、で黙々となりました。)

私の場合、必要に上書き String#to_json でJSON逸品1.4.3ようなときは、適用すべきではな盲目的でエンコードに非asciiが有効-UTF8文字の形で "\uXXXX" る必要がないため、短いバイト(連載)を読みやすい結果"日本語" うsexier私の目の "\u65e5\u672c\u8a9e").

こちらはmonkeyパッチをまとめて入は、下記コード config/initializers/patches.rb

module ActiveSupport
  module JSON
    module Encoding
      class << self
        def escape(string)
          ::JSON.generate([string])[1..-2]
        end
      end
    end
  end
end

やまったく新しい使 to_json 何文字列、配列、ハッシュ.

闘ことが..この最も簡単な解のとおりです。

if defined?(ActiveSupport::JSON)
  [Object, Array, FalseClass, Float, Hash, Integer, NilClass, String, TrueClass].each do |klass|
   klass.class_eval do
    def to_json(*args)
      super(args)
    end
    def as_json(*args)
      super(args)
    end
   end
  end
end

その後でもどこでもactivesupportが読み込まれ..

んで固定す2.3がどうかよろしくお願いします。

私のものの独自の場合は、僕のRuby(レール)のアプリを実際にロード、レールアプリからコンフィグできます。rb負荷)などの宝石で参照されるjson.このように巨大な頭痛、そのような変更、レールアプリの環境です。rbファイルです。その結分岐のジェムを得るためにjson仕事を上昇させることなく、恐ろしい例外:間違った引数タイプのハッシュ(予定データメッセージ。

だったのですが、何か運のこのソリューションセンターは、その逆のとして、地域のwikiからの回答上---http://blog.swivel.com/code/2009/03/active-support-and-json-gems-dont-play-nice.html 基本的には支持者を呼 require'active_support' require'json'

これにて終わってしまったので、うっかく。

私はまだ試してみようにも見えるレール2.3.3かで制御:

ActiveSupport::JSON.backend = 'JSONGem'

こちら

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top