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が生成されません。