如何使用表示嵌套的键将哈希转换为嵌套哈希

时间:2015-11-16 15:02:27

标签: ruby-on-rails ruby hash

我需要转换以下哈希:

{
  "item[0][size]" => "12",
  "item[0][count]" => "1"
}  

到此:

{
  "item": {
    "0": {
      "size": "12",
      "count": "1"
    }
  }
}  

您能否就如何最优雅地实现这一目标提出建议?也许我可以重用一些用于解析参数字符串的ActionPack实用工具方法?

2 个答案:

答案 0 :(得分:1)

您可以重复使用rack lib方法Rack::Utils.parse_nested_query

require "rack"
def p p
  Rack::Utils.parse_nested_query(p)                                               
end
p 'item[0][size]=12' # => {"item"=>{"0"=>{"size"=>"12"}}}

找到here

答案 1 :(得分:0)

经过一番研究后,我发现了一种使用http://apidock.com/rails/Rack/Utils/parse_nested_query解析嵌套查询键的方法:

Rack::Utils.parse_nested_query('item[0][size]')
=> {
  "item" => {
    "0" => {
      "size" => nil
    }
  }
}

现在可以做到:

items_string = item_hash.to_a.map { |row| row.join('=') }.join('&')
result = Rack::Utils.parse_nested_query(items_string)

=> {
  "item" => {
    "0" => {
       "size" => "12",
      "count" => "1"
    }
  }
}