通过忽略黄瓜中的顺序来断言两个json内容

时间:2015-09-03 18:54:42

标签: ruby json cucumber

我正在比较红宝石+黄瓜中的两个json内容或对象 但是当我比较时,它不会忽略内容的顺序,如果它变化。我知道这句话比较为两个字符串。那么无论如何我可以通过忽略它的顺序来比较两个json对象吗?

expect(@act_resp_excl_key).to eq(exp_data_excl_key)

通过上述细节添加更多信息。我有两个json文档,如下所示。

json1 = {
    "entries" =  > [{
                "doingBusinessAsName" =  > "KROGER FOODS",
                "legalName" =  > "Kroger-Corps"
            }
        ]
}

json2 = {
    "entries" =  > [{
                "legalName" =  > "Kroger-Corps"
                "doingBusinessAsName" =  > "KROGER FOODS",
            }
        ]
}

当我在红宝石+黄瓜中比较这两个json时,我得到的结果是失败。但逻辑上它是相同的,我应该通过。我使用上面的比较语句来验证两个jsons。

@tgf, 我使用了你指定的语句,但我的比较仍然失败。你能帮我解决一下这个问题吗?

expect(JSON.parse(@act_resp_excl_key)).to eq JSON.parse(exp_data_excl_key)

2 个答案:

答案 0 :(得分:3)

如果数据只是字符串中的JSON(请发布数据示例),您只需将其解析为ruby哈希并进行比较即可。

require 'json'
JSON.parse(@act_resp_excl_key).class => Hash

然后断言两个哈希是相等的:

expect(JSON.parse(@act_resp_excl_key)).to eq JSON.parse(exp_data_excl_key)

即使订单不同,这也有效。

答案 1 :(得分:0)

您的逗号位于json2的正确位置。

> json1 = { "entries" => [{ "doingBusinessAsName" => "KROGER FOODS", "legalName" => "Kroger-Corps" } ] }
=> {"entries"=>[{"doingBusinessAsName"=>"KROGER FOODS", "legalName"=>"Kroger-Corps"}]}
> json2 = { "entries" => [{ "legalName" => "Kroger-Corps", "doingBusinessAsName" => "KROGER FOODS" } ] }
=> {"entries"=>[{"legalName"=>"Kroger-Corps", "doingBusinessAsName"=>"KROGER FOODS"}]}
> json1==json2
=> true