【发布时间】:2020-09-29 06:31:11
【问题描述】:
我有一个类似的数据结构
lib_data = {'library'=>[{"type"=>"Books",
"checkout"=>false, "data"=>[{"type"=>"Books", "operator"=>"AND", "details"=>{"property"=>"Name", "author"=>"%s",
"name"=>"%s"}}, {"type"=>"Books", "criteria"=>{"property"=>"Revision", "operator"=>"%s",
"value"=>"%s"}}]}]}
我正在尝试首先符号化所有键,然后将值插入由 inplace of %s 表示的键中
我能够将一小段代码猴子修补到 Hash 类中,这将使我能够使用类似这样的东西来符号化所有哈希值
def symbolize_all_keys
keys.each do |k|
key = k.to_sym
value = delete(k)
store(key, value)
end
self
end
然后只使用lib_data.symbolize_all_keys 但这象征着一把钥匙
有没有更惯用的方式来象征所有的钥匙?
还想要一种将值插入到具有 %s 个值的键中的方法吗?
【问题讨论】:
-
Rails 有
Hash#deep_symbolize_keys或者像deep_hash_transformer这样的 gem 可以满足您的需求:递归地转换哈希中的键。即使您不使用 Rails 并且不想包含更多 gem,您也可能希望在其源代码中了解这些 gem 的工作原理。
标签: ruby hash-of-hashes