我正在尝试比较两个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
即使一个块发生变化,我还能比较吗?
答案 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就会看到数组不匹配并且这样说。
除了你自己可以确定一个阵列与另一个阵列相同之外,你看到的结构有多远并不重要。