-1

次の変数があります(JSONオブジェクトから解析されます)

testdata = {
 "file_data"=>[
  {"id"=>"idvalue","desc"=>[
   {"key"=>"value"}
  ]}
 ]
}

filedataは1つだけですが、ハッシュで開始する代わりに、ハッシュを配列に入れます。しかし、この狂気はそれだけではありません。descキーにはハッシュが含まれている必要がありますが、代わりにハッシュを含む1つのオブジェクトの配列が含まれています。

したがって、データを取り出すには、次のようなものを作成する必要があります。

puts testdata["file_data"][0]["desc"][0]["key"]

この過剰な入れ子について何ができますか?

4

1 に答える 1

1

次のようなことができます。

def clean h
  Hash[h.map{|k,v|
    [k,
     case v 
       when Hash then clean(v)  
       when Array then clean(v.first)  
       else v 
     end
    ]
  }]    
end  

clean testdata
#=> {"file_data"=>{"id"=>"idvalue", "desc"=>{"key"=>"value"}}}
于 2012-09-29T19:14:05.003 に答える