我正在从API解析JSON。我有一个foo
元素,有时是一个哈希值,另一个是哈希数组。
foo: { ... }
foo: [
{ ... },
{ ... }
]
我想使用Array(foo)
始终获取至少包含一个元素的数组,但它会将哈希值转换为[[..., ...], [..., ...]]
。除了使用foo.is_a?(Hash/Array)
?
答案 0 :(得分:3)
在Rails环境中,可以访问cd {YOUR_PROJECT_DIR}/platforms/android/cordova [run/build]
:
您可以使用activesupport
Array.wrap
如果没有Rails,您可以执行foo = { a: :b }
=> {:a=>:b}
Array.wrap(foo)
=> [{:a=>:b}]
Array.wrap([1,2,3])
=> [1, 2, 3]
,然后在您的代码中执行:gem install activesupport
答案 1 :(得分:3)
添加到@yez答案,如果您未使用activesupport
,则可以Array
扩展wrap
功能:
def Array.wrap(object)
if object.nil?
[]
elsif object.respond_to?(:to_ary)
object.to_ary || [object]
else
[object]
end
end
从http://apidock.com/rails/Array/wrap/class
复制实现它的另一种粗略方式是:
def Array.wrap(object)
return [] if object.nil?
[object].flatten(1)
end
答案 2 :(得分:2)
如果你想使用普通的Ruby解决它,那么你可以将项目(哈希或哈希数组)推送到一个空数组,然后将数组展平如下:
2.0.0-p247 :001 > [{a:1}].flatten(1)
=> [{:a=>1}]
2.0.0-p247 :002 > [[{a:1},{b:2}]].flatten(1)
=> [{:a=>1}, {:b=>2}]
即。 [foo].flatten(1)
应该有用。