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

标签 ruby

我很困惑为什么 key 的符号版本在以下示例中不起作用。如前所述,我使用的是 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"]
=>“不工作”
1.9.3-p194 :005 > test_hash[:this]
=> 无

最佳答案

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

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


[更新] 正如 akuhn 在评论中提到的,您可以通过将 symbolize_names: true 传递给 JSON.parse 的选项来强制 JSON 模块对所有键进行符号化>:

JSON.parse(json_string, symbolize_names: true)

这将使键成为符号,这意味着在访问哈希时不能使用字符串作为键。

关于Ruby 哈希键作为符号不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13734126/

相关文章:

Ruby:在使用该对象遍历列表时删除对象

Ruby Gem 包管理器因 Gem::GemNotFoundException 失败

ruby-on-rails - 使用 secure_random stub rspec 中的随机值

ruby - 如何检查 <div> 中的文本?

ruby - 在正则表达式中使用否定条件

ruby-on-rails - 使用 ruby​​ 在浏览器中显示 docx 或 ppt

ruby-on-rails - 在 Ruby on Rails 中搜索一行代码以更改数据库中的属性

ruby-on-rails - Ruby on Rails 重定向如何在路由文件中传递参数

windows - Ruby 键盘事件处理

c - 为什么静态值在 IRB 内部被破坏?