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 に答える