python 比较两个json文件

python 比较两个json文件

法1:利用json_tools类库中的方法

  1. 安装pip install json_tools
  2. 使用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("统计完成.")

你可能感兴趣的:(Python学习,json,python,json)