我很困惑为什么键的符号版本在以下示例中不起作用。如上所示,我使用的是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
答案 0 :(得分:12)
JSON是JavaScript的一个子集,没有符号概念。所有键都是字符串 - 因此,当您使用Ruby解析JSON时,将使用字符串作为键创建哈希。
如果您习惯使用Ruby on Rails,您可能习惯使用HashWithIndifferentAccess
es,这允许您使用字符串或符号作为键。< / p>
[更新]正如akuhn在评论中所提到的,您可以通过将symbolize_names: true
传递给JSON.parse
的选项来强制JSON模块对所有键进行符号化:
JSON.parse(json_string, symbolize_names: true)
这将使键符号成为符号,这意味着您在访问哈希时不能使用字符串作为键。
答案 1 :(得分:4)
您可以告诉JSON象征所有名称
data = JSON.parse(input, :symbolize_names => true)