Ruby on rails 如何将具有表示嵌套的键的哈希转换为嵌套哈希
我需要转换以下哈希:Ruby on rails 如何将具有表示嵌套的键的哈希转换为嵌套哈希,ruby-on-rails,ruby,hash,Ruby On Rails,Ruby,Hash,我需要转换以下哈希: { "item[0][size]" => "12", "item[0][count]" => "1" } 为此: { "item": { "0": { "size": "12", "count": "1" } } } 你能就如何最优雅地实现这一目标提出建议吗?也许我可以重用一些ActionPack的实用方法来解析参数字符串?经过一些研究,我找到了一种解析嵌套查询键的方法,使用: 因此,现在可以做
{
"item[0][size]" => "12",
"item[0][count]" => "1"
}
为此:
{
"item": {
"0": {
"size": "12",
"count": "1"
}
}
}
你能就如何最优雅地实现这一目标提出建议吗?也许我可以重用一些ActionPack的实用方法来解析参数字符串?经过一些研究,我找到了一种解析嵌套查询键的方法,使用: 因此,现在可以做到:
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"
}
}
}
您可以重用
rack
lib方法
找到。您尝试过什么吗?尝试过搜索actionpack的代码库并尝试过
CGI::parse('item[0][size]=12')
但它没有解析嵌套的键字符串该哈希的来源是什么?在那里修复它而不是构建一个解决方案可能是有意义的。@Spickerman散列的源是一个CSV文件。为了表示嵌套对象的值,我必须使用一些约定,并考虑使用与嵌套参数键相同的方法。@。很好,但这并不能满足你的要求。请保持一致。@sawa,已将预期结果更新为字符串作为值。但我一直在寻找一个将嵌套键转换为哈希的方法,我发现了这个方法。不仅要考虑值,还要考虑键。请注意,这很接近,但与OP要求的内容不同。@sawa是的,但我的答案基于OP注释。是的,不清楚OP问了什么。
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"
}
}
}
require "rack"
def p p
Rack::Utils.parse_nested_query(p)
end
p 'item[0][size]=12' # => {"item"=>{"0"=>{"size"=>"12"}}}