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。
最佳答案
在JSON RFC , 我们有声明
A JSON text is a serialized object or array.
总结起来差不多。在顶层,您的 JSON 必须是数组或对象之一。
你的代码可以简单地做类似的事情吗:
json = {'myprotocol' => whatever}.to_json
result = JSON.parse(json)['myprotocol']
关于ruby-on-rails - 无法在 Rails 3 中将 String 和 Fixnum 转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075731/