我正在比较红宝石+黄瓜中的两个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)
答案 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