python 比较两个json文件
法1:利用json_tools类库中的方法
- 安装
pip install json_tools
- 使用
json_tools.diff(old,new)
输出 : new参数相对于old参数发生的变化
demo:
- 1.读取新旧json文件(也可以用
json.loads
方法读取json字符串)相关资料可以参考笔者写的另一篇博客:有关json读取的相关资料 - 2.利用
json_tools.diff(old,new)
进行比较 - 3.将结果保存至文件(也可直接对结果进行处理)
with open('/home/output/test/10.json','r',encoding='utf-8')as f:
new10=json.load(f)
with open('/home/test/result/10.json','r',encoding='utf-8')as f:
old10=json.load(f)
with open(os.path.join("/home/output/compare", "cmp{}.json".format(i)), "w", encoding='utf-8') as f:
# 将比较结果写入文件
json.dump(json_tools.diff(old10,new10), f, ensure_ascii=False, indent=4)
法2:根据json内容直接比较
注:此处例子代码为作者对法1产生的结果进行的二次处理,原理相同
编写思路:
- 1.肉眼分析现有的json文件
以法1保存的比较结果的json文件为例
[{
"replace": "doc_id",
"value": "87a470dce53abdc6b7a175751920ea",
"prev": "ab9a5bdf-60b0-b557-bb7918e3"
},
{
"replace": "某字段",
"value": "新值",
"prev": "旧值"
},
]
- 2.读取json文件 并利用
json.load
转换为python类 或者读取json格式字符串 利用json.loads
转换为python类 有关json读取的相关资料
open(os.path.join("/home/output/compare", "cmp{}.json".format(i)), "r", encoding='utf-8') as f:#打开文件
cmpInfo=json.load(f)#转化成python类
- 3.对转化后的python类进行处理
例如,法1生成的信息结构为dict类型的list数组
因此很容易想到利用for循环对数组进行遍历,每一个元素为一个dict,之后再对dict就行处理就可以了
cmpInfo=json.load(f)#上一步读取的信息
for dict_info in cmpInfo:#对数组进行遍历
if addReplaceCnt(dict_info,'某字段'):# 实现的针对法1提取出的replace信息的再次处理的函数
continue
if addReplaceCnt(dict_info, '字段2'):
if dict_info['value']=="xxx" and dict_info['prev']=='yyy':
###其他代码
- 4.可以对上述结构进行统计、整理、总结等,自由发挥
我的demo代码:
for i in range(1,150):
with open(os.path.join("/home/output/compare", "cmp{}.json".format(i)), "r", encoding='utf-8') as f:
cmpInfo=json.load(f)
for dict_info in cmpInfo:
if addReplaceCnt(dict_info,'某字段'):# 实现的针对法1提取出的replace信息的再次处理
continue
if addReplaceCnt(dict_info, '字段2'):
if dict_info['value']=="xxx" and dict_info['prev']=='yyy':
dictCnt['xxxx']+=1
continue
if addReplaceCnt(dict_info, '字段3'):
testNull(dict_info,'value')
continue
if addReplaceCnt(dict_info, 'xxx'):
continue
#其他代码
#其他代码
print("统计完成.")