1
    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。

4

2 回答 2

2

JSON RFC中,我们有声明

JSON 文本是一个序列化的对象或数组。

这几乎概括了它。在顶层,您的 JSON 必须是数组或对象之一。

您的代码可以简单地执行以下操作:

json = {'myprotocol' => whatever}.to_json
result = JSON.parse(json)['myprotocol']
于 2012-08-22T14:57:54.360 回答
1

这不是JSON你要找的。试试这个:

ActiveSupport::JSON.decode('abc'.to_json)
ActiveSupport::JSON.decode(1.to_json)
于 2012-08-22T14:53:02.917 回答