我试图不对哈希中的字符串进行JSON序列化,因为它已经被转义过了。
阅读处理PORO的方法时,需要覆盖 `as_json`。所以我将字符串包装到另一个对象中。但是由于我只处理一个字符串,当我返回该对象时会导致 `堆栈级别太深` 的错误。如果我返回已编码的字符串,则会显然地尝试对其进行转义。
阅读处理PORO的方法时,需要覆盖 `as_json`。所以我将字符串包装到另一个对象中。但是由于我只处理一个字符串,当我返回该对象时会导致 `堆栈级别太深` 的错误。如果我返回已编码的字符串,则会显然地尝试对其进行转义。
activesupport-6.0.3.2/lib/active_support/json/encoding.rb
。 def jsonify(value)
case value
when String
EscapedString.new(value)
when Numeric, NilClass, TrueClass, FalseClass
value.as_json
when Hash
Hash[value.map { |k, v| [jsonify(k), jsonify(v)] }]
when Array
value.map { |v| jsonify(v) }
else
jsonify value.as_json
end
end
我可以做的是猴子补丁上述方法,接受我包装字符串的类,并什么都不做。
我想另一个选择是将JSON字符串解析回哈希表,并让它遵循正常程序。然而,那会影响我们的性能太大了。
因此,我的问题是,有没有更优雅的方法告诉Rails在尝试转换为JSON时遇到特定对象时什么都不做?
编辑:
我正在使用这个已经json化的字符串,例如:
{foo: MyStringJsonWrapper.new('{"bar":"foobar"}')}.to_json
render json: @stuff
时,会调用as_json
方法。你应该将这个方法命名为as_json
。 - Les Nightingill{foo: MyStringJsonWrapper.new('{"bar":"foobar"}')}.to_json
- DickieBoy