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

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
2个回答

14

由于JSON是JavaScript的子集,所以它没有符号的概念。所有键都是字符串 - 因此,当您使用Ruby解析JSON时,哈希将使用字符串作为键创建。

如果您习惯于使用Ruby on Rails,则可能习惯于使用HashWithIndifferentAccess,该类型允许您使用字符串或符号作为键。


[更新] 如评论中的akuhn所述,您可以通过在JSON.parse选项中传递symbolize_names: true来强制将所有键转换为符号:

JSON.parse(json_string, symbolize_names: true)

这将使键变为符号,这意味着在访问哈希时无法使用字符串作为键。


谢谢。今天一直在Perl和Ruby之间切换,感觉很长。有时候我会想象Ruby有一些它实际上没有的功能。 - Jeff Erickson
4
可以使用JSON.parse(input, :symbolize_names => true)进行解析。 - akuhn

5
你可以告诉JSON将所有名称符号化。
data = JSON.parse(input, :symbolize_names => true)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接