栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 之 json diff 工具类

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 之 json diff 工具类

一:背景

json作为一种常用的数据交换格式,在日常coding中,出现的频率非常之高。

在测试的时候,可以方便的对json进行比较也是非常频繁的需求

一个简单版本的实现,这里用作记录

二:代码 1. python版本
import json

def diff(a, b):
    """
    :param a: dict
    :param b: dict
    :return: dict
    """
    result = {}
    # 遍历a,获取在b中不存在,或者是和b中的value不一致的对象
    for key in a:
        if key in b:
            a_val = a[key]
            b_val = b[key]

            if a_val != b_val:
                if (type(a_val) == dict) & (type(b_val) == dict):
                    inner_result = diff(a_val, b_val)
                    result[key] = inner_result
                else:
                    result[key] = {'left': a_val, 'right': b_val}
        else:
            result[key] = {'left': a[key], 'right': '-'}

    # 遍历b,获取在a中不存在
    for key in b:
        if key not in a:
            result[key] = {'left': b[key], 'right': '-'}

    return result


if __name__ == '__main__':
    s = """
    {
    "r":{
        "sd":23,
        "d":33
    },
    "a":12,
    "i":98
    }
    
    """

    s2 = """
    {
        "r":{
        "sd":23,
        "d":35
    },
        "a":14,
        "b":78,
        "i":98
        }

        """

    result = diff(json.loads(s), json.loads(s2))
    print(json.dumps(result, indent=2))

结果解释:
在整个结果dict 中,key分为三种情况:
1)left:value对应在diff方法中传入的第一个参数的value
2)right:value对应在diff方法中传入的第二个参数的value
3)如果是非1和2两种情况,那么就说明该key是diff方法中传入的两个dict参数中value不同的key。

如上面的结果中:

  1. 首先看到r,那说明在参数a和b中,r对应的value是不一样的;
  2. 发现r的下一层是key为d,那就说明在a和b中r对应的value必然也是一个dict,而在这个子层dict中,其他key为d的value在两者是不同的;
  3. 继续往下看,看到d对应的value有两个key,分别是left和right,那就说明left对应的value为d在a中对应的值,right对应的value为d在b中对应的值。
  4. 对应某一个key只在a或者是b中存在,那么不存在的那边会以-来代替value
三:总结

先实现python版本的,是因为在json.loads方法中,如果子层结果为dict,那么可以自动识别到,所有上面直接判断了是否为dict类型

todo:可视化,其他语言版本

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/951857.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号