"json"ハッシュをフラット化されたハッシュにフラット化し、フラット化されたキーにパス情報を保持するメソッドを探しています。たとえば :ネストされたjsonオブジェクトをフラット化する
h = {"a" => "foo", "b" => [{"c" => "bar", "d" => ["baz"]}]}
がフラット化(H)を返す必要があります。
{"a" => "foo", "b_0_c" => "bar", "b_0_d_0" => "baz"}
"json"ハッシュをフラット化されたハッシュにフラット化し、フラット化されたキーにパス情報を保持するメソッドを探しています。たとえば :ネストされたjsonオブジェクトをフラット化する
h = {"a" => "foo", "b" => [{"c" => "bar", "d" => ["baz"]}]}
がフラット化(H)を返す必要があります。
{"a" => "foo", "b_0_c" => "bar", "b_0_d_0" => "baz"}
これはあなたの問題を解決する必要があります。
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
非常に良い解決策。 – pguardiario
私は同様の質問を有し、ここでそれを上げています Best way to produce a flattened JSON (denormalize) out of hierarchical JSON in Rubyには可能な解決策があります
Is私のソリューションは最適なものか、それとももっと良い方法がありますか?
このような状況では、「何を試しましたか」とは言えません。これは一般的な質問であり、ナレッジベースに含めると便利です。 – pguardiario
もし私がそれを自分で実装すれば、ここにはないでしょう。私は答えがここにあるべきだと思ったので、私はその質問を投稿した。 – pguardiario
ああ、あなた、OPです。申し訳ありません:) –