これは少し複雑ですが、このハッシュをループして、各要素が次の条件のいずれかを満たしているかどうかを確認する必要があります。
値は文字列です
また
値は、ハッシュではなく文字列を含むハッシュです
また
値は、文字列および/またはハッシュを含むハッシュです
また
値は配列です
アップデート:
非常に奇妙なこと... [編集: #collect が配列であるハッシュのキーと値のペアを返すためです]
irb> my_hash['gd:name'].collect(&:class)
=> [Array, Array]
以下のハッシュを見ると、その内部要素のクラスは配列ではなくハッシュである必要がありますか?
検査すると次のようになります。
irb> my_hash['gd:name'].collect(&:inspect)
=> ["[\"gd:givenName\", {\"$t\"=>\"Thomas\"}]", "[\"gd:familyName\", {\"$t\"=>\"Chapin\"}]"]
しかし、それはハッシュのように振る舞います:
irb> my_hash['gd:name']['gd:givenName']
=> {"$t"=>"Thomas"}
irb> my_hash['gd:name']['gd:givenName']['$t']
=> "Thomas"
{
"gd:etag"=>"\"Rnk7fjVSLyt7I2A9WhVQEU4KRQI.\"",
"id"=>{
"$t"=>"da513d38e88d949"
},
"gd:name"=>{
"gd:givenName"=>{"$t"=>"Thomas"}, "gd:familyName"=>{"$t"=>"Chapin"}
},
"gd:phoneNumber"=>[
{
"rel"=>"mobile",
"$t"=>"(480) 703-4887"
}
],
"gd:email"=>[
{
"rel"=>"home",
"primary"=>"true",
"address"=>"tchapin@gmail.com"
},
{
"rel"=>"work",
"address"=>"tom@tornadodesign.com"}
]
}