如果你有,你可以创建自定义函数嵌套很深的结构,以检查是否有键存在,并显示其值:
def nested_value hash, *args
tmp = hash
args.each do |arg|
return nil if tmp.nil? || !tmp.respond_to?(:[]) || (tmp.is_a?(Array) && !arg.is_a?(Integer))
tmp = tmp[arg]
end
tmp
end
例如,如果你已经从你的例子加载以下YAML:
k = [
{ "id"=>"deal one",
"options"=>{"redemptionLocations"=>[{"streetAddress1"=>"123 Any Street\""}]}},
{ "id"=>"deal two",
"options"=>[]}]
然后,你可以这样做:
nested_value k.first, 'options', 'redemptionLocations', 0, 'streetAddress1'
=> "123 Any Street \""
nested_value k.last, 'options', 'redemptionLocations', 0, 'streetAddress1'
=> nil
谢谢大卫。我认为,由于数据结构的深度,我得到这个错误:NoMethodError:未定义的方法'streetAddress1'为零:NilClass – deadkarma 2011-03-16 17:53:49