JSON.parse('abc'.to_json) gives this error (in rails):
JSON::ParserError: 757: unexpected token at '"abc"'
from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/json-1.7.4/lib/json/common.rb:155:in `parse'
from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/json-1.7.4/lib/json/common.rb:155:in `parse'
from (irb):20
from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start'
from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start'
from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:41:in `require'
from script/rails:41:in `<main>'
同样,这失败了:
JSON.parse(100.to_json)
这也是(略有不同的错误):
JSON.parse(1.to_json)
为什么我不将输出的 json 包装在 {} 中以使其看起来像真正的 json?因为我正在编写应该能够获取任何对象并将其序列化为 JSON 并再次将其拉回的代码。
我认为问题出在此:JSON 看起来像一组编码的键值对,都放在 {} 中。但是 rails (3.x) 中的 to_json 方法根本不输出任何 {}。
鉴于此,我真正想要的只是一种将任意 ruby/rails 对象序列化为字符串并再次返回的简单方法。已经有许多对象具有 to_json 方法(String、Fixnum、Array、Hash),但 String 和 Fixnum 版本不会生成可以解析的 Json。