Ruby on rails 将json响应与哈希数组进行比较

Ruby on rails 将json响应与哈希数组进行比较,ruby-on-rails,ruby,json,hash,rspec,Ruby On Rails,Ruby,Json,Hash,Rspec,当我在JSON响应中得到一个对象数组时,它们可能以不同的顺序表示 有时候我会这样 JSON.parse(response.body) # => [{"a" => "b"}, {"c" => "d"}] 还是这个 JSON.parse(response.body) # => [{"c" => "d"}, {"a" => "b"}] 但对我来说,这两个结果都是正确的。测试响应中的哪些对象(无论其顺序如何)的最简单方法是什么?您可以使用散列将其转换为类似集合的结

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

有时候我会这样

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

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

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

您可以使用散列将其转换为类似集合的结构

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

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

除了其他有用的功能外,gem还有一个
be\u json\u eql
匹配器,它的工作方式与顺序无关。

可能重复的是,您想比较这两个键还是只想检查是否存在某些键?@padde,我想比较数组中的两个或更多哈希。但我不想比较它们在数组中的顺序。我不确定
be\u json\u eql
的可能重复项是否与顺序无关。代码看起来像
@actual,@expected=scrub(actual\u json,@path),scrub(@expected\u json)
,然后直接执行
@actual==@expected
scrub
方法负责排除您不想成为比较的一部分的键(例如,
updated\u at
),并“规范化”JSON,它只调用
JSON.pretty\u generate
来生成JSON