【问题标题】:keys of a hash that loads from a json string从 json 字符串加载的哈希键
【发布时间】:2013-12-06 06:33:57
【问题描述】:

我们知道 Ruby 具有符号的特性,通常将符号用作哈希键,与字符串对象相比可以节省空间。说:

myhash[:mykey] = "myvalue"

但是如果我从 json 字符串中加载一个哈希值,比如说:

str = '{"mykey": "myvalue"}'
myhash = JSON.parse(str)

那么我必须使用字符串键来访问哈希:

puts myhash["mykey"]  # myvalue

这合理吗?为什么 JSON.parse 只为哈希键添加符号?

【问题讨论】:

  • 一个原因可能是因为带有非字母数字字符的符号无论如何都需要引号,所以它实际上会变得更加笨拙。例如,如果 json 键是“hi there”,那么红宝石符号将是:“hi there”。在一般情况下更容易成为一个字符串。
  • JSON 不是一种纯 Ruby 格式,也不是首先为 Ruby 编写的。它代表了 JavaScript 如何定义对象,结果证明它对所有需要抛出数据的语言都非常有用。很少有其他语言支持符号,尤其是 JavaScript,因此没有必要或特别需要包含符号支持。

标签: ruby


【解决方案1】:

将键作为字符串返回是JSON 默认行为。您可以通过提供额外的 symbolize_names 参数来覆盖。

str = '{"mykey": "myvalue"}'
JSON.parse(str)
#=> {"mykey"=>"myvalue"}

JSON.parse(str, {:symbolize_names => true})
#=> {:mykey=>"myvalue"}

正如@Matt 在他的评论中所说,如果密钥恰好有空格(例如:my key),它会将其键入为-:"my key"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多