4

次の例でキーのシンボル バージョンが機能しない理由がわかりません。示されているように、Ruby 1.9.3 を使用しています。これははるかに大きなアプリの一部ですが、この問題に絞り込むことができました。

前もって感謝します!

1.9.3-p194 :002 > json_sample = "{\"this\":\"notworking\"}"
=> "{\"this\":\"notworking\"}"
1.9.3-p194 :003 > test_hash = JSON.parse json_sample
=> {"this"=>"notworking"}
1.9.3-p194 :004 > test_hash["this"]
=> "notworking"
1.9.3-p194 :005 > test_hash[:this]
=> nil

4

2 に答える 2

14

JavaScript のサブセットである JSON には、シンボルの概念がありません。すべてのキーは文字列です。したがって、Ruby で JSON を解析すると、文字列をキーとしてハッシュが作成されます。

Ruby on Rails の操作に慣れている場合は、キーに文字列または記号HashWithIndifferentAccessを使用できる es の操作に慣れているかもしれません。


[更新] コメントで akuhn が述べたように、次symbolize_names: trueのオプションに渡すことで、JSON モジュールにすべてのキーをシンボル化するように強制できますJSON.parse

JSON.parse(json_string, symbolize_names: true)

これにより、キーがシンボルになります。つまり、ハッシュにアクセスするときに文字列をキーとして使用することはできません。

于 2012-12-05T23:07:27.003 に答える
5

JSON にすべての名前を記号化するように指示できます

data = JSON.parse(input, :symbolize_names => true)
于 2012-12-06T00:29:30.920 に答える