有没有什么方法JSON比较忽略整个部分错位?

时间:2015-09-23 18:40:40

标签: ruby json cucumber

我正在尝试比较两个JSON对象。当'key:value'对顺序发生变化时,我可以使用JSON.parse,并且在比较期间,测试通过如下:

doc1 = '{
    "KayA": "Value_A",
    "KeyB": "value_B"
}'

doc2 = '{
    "KeyB": "value_B",
    "KayA": "Value_A"
}'

doc1 = JSON.parse(doc1)
doc2 = JSON.parse(doc2)

expect(doc1).to eq(doc2) # true

但是当一个部分,一个数组或一个内容块的顺序发生变化时,如果我执行如下相同的比较逻辑,我的断言就会失败:

doc1 = '{
    "keys": [
        {
            "KayA": "Value_A",
            "KeyB": "value_B"
        },
        {
            "KayC": "Value_C",
            "KeyD": "value_D"
        }
    ]
}'

doc2 = '{
    "keys": [
        {
            "KayC": "Value_C",
            "KeyD": "value_D"
        },
        {
            "KayA": "Value_A",
            "KeyB": "value_B"
        }
    ]
}'

doc1 = JSON.parse(doc1)
doc2 = JSON.parse(doc2)

expect(doc1).to eq(doc2) # false

即使一个块发生变化,我还能比较吗?

1 个答案:

答案 0 :(得分:0)

问题在于哈希和数组有不同的平等观点。考虑这些:

{a:1, b:2} == {a:1, b:2} # => true
{a:1, b:2} == {b:2, a:1} # => true

[1,2] == [1,2] # => true
[1,2] == [2,1] # => false

一旦相等性检查到达嵌入式数组,Ruby就会看到数组不匹配并且这样说。

除了你自己可以确定一个阵列与另一个阵列相同之外,你看到的结构有多远并不重要。