python diff json方法

Posted snailon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python diff json方法相关的知识,希望对你有一定的参考价值。

在测试过程中经常会对比两个json的异同,如果当json串较长时,一个一个的对比显然是很浪费时间的。

所以写一个比较json异同的测试方法是很有必要的。

下面介绍一下比较json异同的两种方法,以及测试demo。

 

json_tools

首先介绍下python的类库 json_tools

安装:pip install json_tools

比较json

import json_tools

def jsonDiff():
    a={\'left\': 1, \'right\': "r","box":"b"}
    b={\'left\': 1, \'right\': "R","boxs":"box"}
    result=json_tools.diff(a,b)
    print result

if __name__ == \'__main__\':
    jsonDiff()

结果:

[{\'prev\': \'b\', \'remove\': \'/box\'}, {\'prev\': \'r\', \'value\': \'R\', \'replace\': \'/right\'}, {\'add\': \'/boxs\', \'value\': \'box\'}]

输出导读:

上面的输出显示的是b相对于a的变化:

1) b和a都有键’right’,但是b相对a键’right’的值发生了变化,由原来的r变为R,所以比较结果的list有{\'replace\': \'/right\', \'value\': \'R\', \'prev\': \'r\'}

其中replace标识发生变化的键,value标识变化后即当前该键的值,prev表示该键此前的值。

2) b中的boxes相对于a,是新增的键,所以结果集中有{\'add\': \'/boxs\', \'value\': \'box\'}

3) b相对于a没有box键,所以结果集中有{\'remove\': \'/box\', \'prev\': \'b\'}

 

多层嵌套的对比

 

 

输出为:

[{\'replace\': \'/left\', \'value\': 5, \'prev\': 6}, {\'add\': \'/right/ads/des\', \'value\': \'新增键\'}, {\'remove\': \'/box/3\', \'prev\': {\'id\': 4, \'title\': \'标题4\'}, \'details\': \'array-item\'}]

其中/right/ads/des,表示{“right”:{“ads”:{“des”:}}}

递归

下面介绍下作者自己编写的比较方法,使用了递归的方法比较两个json串

 

 

 可以输出不同的value,也可以根据自己的需要进行改进。

以上是关于python diff json方法的主要内容,如果未能解决你的问题,请参考以下文章

常用python日期日志获取内容循环的代码片段

python python中的漂亮(或漂亮打印)JSON对象具有这一功能。在尝试了解什么时,我总是使用这个片段

如何从片段中的 JSON 响应中的对象获取数据

如何根据枚举类型重载python类方法

json 个人的vscode的代码片段

比较两个 JSON 对象,而不考虑其中的元素序列