Spłaszcz zagnieżdżony obiekt json

Szukam metody, która spłaszczy hash „json” do spłaszczonego skrótu, ale zachowa informacje o ścieżce w spłaszczonych kluczach. Na przykład:

h = {"a" => "foo", "b" => [{"c" => "bar", "d" => ["baz"]}]}

flatten (h) powinien wrócić:

{"a" => "foo", "b_0_c" => "bar", "b_0_d_0" => "baz"}