在python中是否有任何方法/类/模块来比较两个json对象并打印更改/差异?
我尝试使用"json_tools",这会产生相当不错的结果,但是如果有两个json对象中有不同顺序的元素的python列表,则diff会失败.
例如
{
'Person' :
{
'FName' : 'John',
'LName' : 'Rambo',
'Sex' : 'Male'
'Height' : '6 ft',
'Weight' : '90 KG',
'Children' :
[
{
'FName' : 'Anna',
'LName' : 'Rambo',
'Sex' : 'Female',
'Height' : '5 ft',
'Weight' : '55 KG',
},
{
'FName' : 'Jemmy',
'LName' : 'Rambo',
'Sex' : 'Male',
'Height' : '5 ft',
'Weight' : '60 KG',
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
{
'Person' :
{
'FName' : 'John',
'LName' : 'Rambo',
'Sex' : 'Male'
'Height' : '6 ft',
'Weight' : '90 KG',
'Children' :
[
{
'FName' : 'Jemmy',
'LName' : 'Rambo',
'Sex' : 'Male',
'Height' : '5 ft',
'Weight' : '60 KG',
},
{
'FName' : 'Anna',
'LName' : 'Rambo',
'Sex' : 'Female',
'Height' : '5 ft',
'Weight' : '55 KG',
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
json diff显示两个jsons不匹配..逻辑上那些是相同的..
在python中有一个很好的json匹配和比较方法吗?
您可以使用jsondiff
from jsondiff import diff
diff(json1, json2)
Run Code Online (Sandbox Code Playgroud)
...假设您已从示例中加载了json条目的json1和json2(顺便说一句,“ sex”条目之后有一个逗号缺失)。
您可以使用deepdiff与ignore_order=True
from deepdiff import DeepDiff
t1 = {1:1, 2:2, 3:3, 4:{"a":"hello", "b":[1, 2, 3]}}
t2 = {1:1, 2:2, 3:3, 4:{"a":"hello", "b":[1, 3, 2, 3]}}
ddiff = DeepDiff(t1, t2, ignore_order=True)
print (ddiff)
{}
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,它们是相同的。
他们不是。JSON 数组中的顺序很重要。我不知道有任何工具会忽略您的顺序。您可以尝试对反序列化结构进行递归,将列表转换为某种多重集,将 dict 转换为某种可散列、冻结的 dict(以便您可以将它们放入多重集),然后在其上运行您自己的 diff 例程。
| 归档时间: |
|
| 查看次数: |
11825 次 |
| 最近记录: |