将json响应与散列数组进行比较

时间:2012-11-05 15:27:04

标签: ruby-on-rails ruby json hash rspec

当我在JSON响应中获得一个对象数组时,它们可能以不同的顺序表示。

有时候我会得到这个

JSON.parse(response.body) # => [{"a" => "b"}, {"c" => "d"}]

或者

JSON.parse(response.body) # => [{"c" => "d"}, {"a" => "b"}]

但对我来说,两个结果都是正确的。无论顺序如何,测试哪些对象的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以使用哈希将其转换为类似于集合的结构。

first_response.inject({}){|s, h| s[h] = true; s}

相同
second_response.inject({}){|s, h| s[h] = true; s}

答案 1 :(得分:2)

除了其他有用的功能外,json spec gem还有一个be_json_eql匹配器,无需按顺序工作。