我可以用Ruby清理这个过度嵌套的JSON吗?

时间:2012-09-29 17:49:27

标签: ruby arrays hashtable

我有以下变量(从JSON对象解析)

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

只有一个filedata,但它不是以哈希开头,而是将哈希包含在一个数组中。但是这种疯狂并没有结束:desc键应该包含一个哈希,而是包含一个包含哈希的单对象数组。

因此要获取任何数据,我必须编写类似

的内容
puts testdata["file_data"][0]["desc"][0]["key"]

对于这种多余的嵌套,我该怎么办?

1 个答案:

答案 0 :(得分: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"}}}