Ich habe eine eingehende Eingabe, die manchmal ein Array von Hashes ist und manchmal ist es nur ein einzelner Hash.Wie mit dem Fall zu behandeln, wenn die Eingabe zu reduzieren ist Hash anstelle von Array von Hashes
hsh = {"property"=>[{"name"=>"first_name", "value"=>"Joe"}, {"name"=>"last_name", "value"=>"Doe"}]}
oder
hsh = {"property"=>{"name"=>"Foo", "value"=>"Bar"}}
Von diesem Eingang ich einen Hash mit name
als key
zu erzeugen versuchen und value
und als value
, etwa wie folgt:
hsh['property'].reduce(HashWithIndifferentAccess.new) do |scan, kv_pair|
scan.merge kv_pair['name'] => kv_pair['value']
end
Giving:
{"first_name"=>"Joe", "last_name"=>"Doe"}
Dies funktioniert gut, wenn hsh['property']
ein Array von Hashes ist aber nicht mit dem folgenden Fehler:
TypeError: no implicit conversion of String into Integer
wenn es nur ein Hash ist.
Wie handhabe ich die reduce
auf hsh['property']
so behandelt es den Fall, wenn die Eingabe ist es Hash-Hash anstelle von Array von Hashes?
Wahrscheinlich nur den Typ überprüfen. I.e. 'if value.is_a? (Hash) ... else' –