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

mma*_*mar 1 ruby json cucumber

我正在像这样比较 ruby​​+cucumber 中的两个 json 内容或对象,但是当我比较时,它不会忽略内容的顺序(如果内容发生变化)。我知道这个语句比较为两个字符串。那么无论如何我可以通过忽略其顺序来比较两个json对象?

expect(@act_resp_excl_key).to eq(exp_data_excl_key)
Run Code Online (Sandbox Code Playgroud)

使用上述详细信息添加更多信息。我有两个 json 文档,如下所示。

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

json2 = {
    "entries" =  > [{
                "legalName" =  > "Kroger-Corps"
                "doingBusinessAsName" =  > "KROGER FOODS",
            }
        ]
}
Run Code Online (Sandbox Code Playgroud)

当我在 ruby​​+cucumber 中比较这两个 json 时,我得到的结果是失败。但逻辑上它是一样的,我应该通过。我使用上面的比较语句来验证两个json。

@tgf,我使用了您指定的语句,但我的比较仍然失败。你能帮我看看是什么问题吗?

expect(JSON.parse(@act_resp_excl_key)).to eq JSON.parse(exp_data_excl_key)
Run Code Online (Sandbox Code Playgroud)

tgf*_*tgf 5

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

require 'json'
JSON.parse(@act_resp_excl_key).class => Hash
Run Code Online (Sandbox Code Playgroud)

然后断言两个哈希值相等:

expect(JSON.parse(@act_resp_excl_key)).to eq JSON.parse(exp_data_excl_key)
Run Code Online (Sandbox Code Playgroud)

即使顺序不同,这也有效。