Ruby哈希键作为符号不起作用

时间:2012-12-05 23:03:56

标签: ruby

我很困惑为什么键的符号版本在以下示例中不起作用。如上所示,我使用的是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

2 个答案:

答案 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)