我正在成功使用Savon调用操作以从SOAP端点获取数据。每个返回的对象都是约15个元素的哈希。
当API需要返回多个对象时,它将以数组形式返回它们,例如: 数据= [{key1a => val1a,key1b => val1b,key1c => val1c},{key2a => val2a,key2b => val2b,key2c => val2c},{key3a => val3a,key3b => val3b,key3c = > val3c}]
这使我可以遍历每个数据的响应,然后将每个散列分解成块。
如果我得到一个响应,它仅返回未包含在数组中的哈希值。这意味着当我对它运行.each时,它正在查看Hash元素(key1a等)
data = {key => val,key2 => val2,key3 => val3}
要解决此问题,我必须对返回的对象运行.class,并且如果它是数组或哈希,则应将其区别对待。
我查看了从API返回的原始数据,并且标记结构看起来相同,所以我怀疑这是Savon行为,而不是API行为。
有什么办法改变这个?不知道这是否是一个“ bug”,但肯定会使我的代码看起来比所需的更加混乱。
答案 0 :(得分:0)
您可能要使用splat运算符
data = *{ key: 'val', key2: 'val2', key3: 'val3' }
它将哈希强制转换为数组数组。我在Savon资料中经常使用它。