-1

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

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

只有一个文件数据,但不是以散列开头,而是将其散列封装在一个数组中。但这种疯狂并没有就此结束:desc 键应该包含一个散列,而是包含一个单对象数组,其中包含一个散列。

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

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 回答