3

我在数据库中有一个 JSON 格式的哈希。例如

{
  "one" => {
    "two" => {
      "three" => {}
    }
  } 
}

我需要从字符串中生成它。上面的示例将从字符串“one.two.three”生成。

首先,我将如何做到这一点?

问题的第二部分。我将收到多个字符串——每一个都建立在最后一个之上。因此,如果我得到“one.two.three”,然后是“one.two.four”,我会变成这样:

{
  "one" => {
    "two" => {
      "three" => {},
      "four" => {}
    }
  } 
}

如果我两次得到“one.two.three”,我希望最新的“three”值覆盖那里的值。字符串也可以是任意长度(例如“one.two.three.four.five”或只是“one”)。希望这是有道理的?

4

1 回答 1

13

要生成嵌套哈希:

hash = {}

"one.two.three".split('.').reduce(hash) { |h,m| h[m] = {} }

puts hash #=> {"one"=>{"two"=>{"three"=>{}}}}

如果您没有安装 rails,请安装 activesupport gem:

gem install activesupport

然后将其包含到您的文件中:

require 'active_support/core_ext/hash/deep_merge'

hash = {
  "one" => {
    "two" => {
      "three" => {}
    }
  } 
}.deep_merge(another_hash)

对内部的访问将是:

hash['one']['two']['three'] #=> {}
于 2012-08-14T01:14:00.320 回答