gpt4 book ai didi

ruby-on-rails - 在 Rails 简单字符串中解码 JSON 会引发错误

转载 作者:行者123 更新时间:2023-12-04 01:06:29 27 4
gpt4 key购买 nike

我正在尝试在 json 中对纯字符串进行往返编码/解码,但出现错误。

在 rails 2.3。使用 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

这是新常态吗?

最佳答案

此更改发生在 switch from ActiveSupport's JSON backend to MultiJson包含在 Rails 3.1.0.rc1 中。每 MultiJson project team ,当前行为是正确的,由于 RFC4627,之前的实现是错误的的 JSON 语法规范:

2.  JSON Grammar

A JSON text is a sequence of tokens. The set of tokens includes six
structural characters, strings, numbers, and three literal names.

A JSON text is a serialized object or array.

JSON-text = object / array

既不是 "abc"也不是 "/"abc/""是序列化的对象或数组,尝试解码它们时出错是合适的。

来自 JSON website 的图表加强本规范。

话虽如此,这似乎意味着 to_json 实现中的一个错误导致:
ruby-1.9.2-p180 :001 > "abc".to_json
=> "\"abc\""

关于ruby-on-rails - 在 Rails 简单字符串中解码 JSON 会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com