【发布时间】:2011-05-27 17:57:31
【问题描述】:
我正在尝试在 json 中对纯字符串进行往返编码/解码,但出现错误。
在轨道 2.3 中。 w/ ruby 1.8.6,它曾经可以工作。
>> puts ActiveSupport::JSON.decode("abc".to_json)
abc
=> nil
在带有 ruby 1.9.2 的 rails 3.1beta1 中,它会引发错误。
ruby-1.9.2-p180 :001 > puts ActiveSupport::JSON.decode("abc".to_json)
MultiJson::DecodeError: 706: unexpected token at '"abc"'
from /home/stevenh/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/json/common.rb:147:in `parse'
from /home/stevenh/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/json/common.rb:147:in `parse'
from /home/stevenh/.rvm/gems/ruby-1.9.2-p180/gems/multi_json-1.0.1/lib/multi_json/engines/json_gem.rb:13:in `decode'
[...]
这与nil.to_json cannot be parsed back to nil? 讨论的问题几乎相同
但 nil 过去也可以在 2.3/1.8.7 中工作。
puts ActiveSupport::JSON.decode(nil.to_json)
nil
这是新常态吗?
【问题讨论】:
-
由于字符串“abc”不是有效的 JSON,因此 DecodeError 似乎适合我。
-
我必须同意@polarblau,尤其是因为: ruby-1.9.2-p180 :012 > ActiveSupport::JSON.decode({:abc => "test"}.to_json) => {"abc"=>"测试"}
-
@polarblau, @Yardboy:我不同意:
ActiveSupport::JSON.decode("abc".to_json)解码"\"abc\""而不是“abc”。问题是解码器不能正确处理简单的字符串。 -
@mosch 也许吧。再深入一点,问题似乎出现在 3.1.0.rc1 中,当时 ActiveSupport JSON 后端被替换为 MultiJson(拉取请求:github.com/rails/rails/pull/289)。我向 multi_json github 项目提交了一个问题,询问这个问题 (github.com/intridea/multi_json/issues/17) - 也许他们会有一些见解。
-
@Yardboy:感谢您的工作。很高兴知道:它不起作用,也不应该;)
标签: ruby-on-rails json