我正在尝试使用httparty(在Ruby程序中)来查询REST服务并解析XML代码。
我发现了一个奇怪的问题,如果REST查询返回两个或多个元素,httparty将这些视为HASH数组。
如果REST查询返回一个元素,则httparty将其视为HASH(而不是具有一个元素的数组)。
这有副作用,我无法在"每个"因为当我在包含散列的变量上执行此操作时,它会爆炸(而如果我循环使用HASH数组则它可以正常工作)。
这是我正在使用的代码:
response = self.class.get("/api/vdc/#{vDC}/peers")
peers = response['References']['Reference']
peers.each do |peer|
# ....various stuff....
end
"参考文献"是主要标签和"参考"是返回的项目数,范围从1到多(如果代码失败,则代码失败,如果许多代码正常工作)。
思考?谢谢!
马西莫。
答案 0 :(得分:0)
获得一致行为的快速而简单的方法是将结果放入数组并将其展平。
一种敏感的方法:
response = self.class.get("/api/vdc/#{vDC}/peers")
peers = response['References']['Reference']
peers = [peers] if peers.is_a?(Hash)
类不敏感的方法:
response = self.class.get("/api/vdc/#{vDC}/peers")
peers = [response['References']['Reference']].flatten
这样,无论是返回单个散列还是散列数组,结果都会被视为每次散列数组。您需要确定flatten方法的费用是否过高 - 非常大的数组可能需要一些时间/内存来展平。