是否有一种简单的方法来迭代嵌套哈希中的每个键。我有一个大的json,我只想要某些键的值,无论它们处于什么级别。他们的父母是谁也无关紧要。寻找直线的方法迭代每个键并返回等于特定字符串的键的值。
答案 0 :(得分:2)
module HashNestedGet
refine Hash do
def nested_get(key)
return fetch(key) if has_key?(key)
each do |subkey, subval|
if Hash === subval
result = subval.nested_get(key)
return result if result
end
end
nil
end
end
end
a = { b: 1, c: { d: { e: 2 } } }
using HashNestedGet
require 'pp'
pp a.nested_get(:b)
# => 1
pp a.nested_get(:e)
# => 2
pp a.nested_get(:d)
# => nil
(作为细化发布,因此在irb
中不起作用;如果需要,可以很容易地生成普通函数)