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

JSON 作为 JavaScript 的一个子集,没有符号的概念。所有键都是字符串——因此,当您使用 Ruby 解析 JSON 时,会使用字符串作为键来创建哈希。

如果您习惯使用 Ruby on Rails,您可能习惯使用HashWithIndifferentAccesses,它允许您使用字符串符号作为键。


[更新] 正如 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 回答