I\'m looking for a method that will flatten a \"json\" hash into a flattened hash but keep the path information in the flattened keys. For example:
h = {\"a\
This should solve your problem:
h = {'a' => 'foo', 'b' => [{'c' => 'bar', 'd' => ['baz']}]}
module Enumerable
def flatten_with_path(parent_prefix = nil)
res = {}
self.each_with_index do |elem, i|
if elem.is_a?(Array)
k, v = elem
else
k, v = i, elem
end
key = parent_prefix ? "#{parent_prefix}.#{k}" : k # assign key name for result hash
if v.is_a? Enumerable
res.merge!(v.flatten_with_path(key)) # recursive call to flatten child elements
else
res[key] = v
end
end
res
end
end
puts h.flatten_with_path.inspect
I'm having a similar question and raised it here Best way to produce a flattened JSON (denormalize) out of hierarchical JSON in Ruby with a possible solution
Is my solution an optimal one or is there any better way?