备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 雷子说测试开发 python json对比利器--deepdiff
2 0

海报分享

python json对比利器--deepdiff

主要用来对比两个对象之间的差异性,搜索某个元素是都在一个对象中,对一个可迭代对象进行hash运算。

可以在:Python 3.6+ and PyPy3.

主要组成部分

DeepDiff:比较两个对象,对象可以是字段、字符串等可迭代的对象

DeepSearch:在对象中搜索其他对象

DeepHash:根据对象的内容进行哈希处理

安装方式

pip install deepdiff

如何使用呢?

我们去对比两个json

from deepdiff import  DeepDiff
jsonone={
    'code':1,
    "message":"成功",
    'data':{
        'id':1
jsontwo={
    'code':2,
    "message":"成功",
    'data':{
        'id':2
print(DeepDiff(jsonone,jsontwo))

看下最后输出结果

{'values_changed': 
  {"root['code']": 
    {'new_value': 2, 'old_value': 1}, 
    "root['data']['id']": 
    {'new_value': 2, 'old_value': 1}}}

主要内容回输出一下结果

主要包含以下四种情况
type_changes:类型改变的key
values_changed:值发生变化的key
dictionary_item_added:字典key添加
dictionary_item_removed:字段key删除

在使用的时候,我们还可以下面参数,根据我们的需要去选择就可以。下面是支持的字段选择。 def __init__(self, cache_purge_level=1, cache_size=0, cache_tuning_sample_size=0, custom_operators=None, cutoff_distance_for_pairs=CUTOFF_DISTANCE_FOR_PAIRS_DEFAULT, cutoff_intersection_for_pairs=CUTOFF_INTERSECTION_FOR_PAIRS_DEFAULT, encodings=None, exclude_obj_callback=None, exclude_paths=None, exclude_regex_paths=None, exclude_types=None, get_deep_distance=False, group_by=None, hasher=None, hashes=None, ignore_encoding_errors=False, ignore_nan_inequality=False, ignore_numeric_type_changes=False, ignore_order=False, ignore_order_func=None, ignore_private_variables=True, ignore_string_case=False, ignore_string_type_changes=False, ignore_type_in_groups=None, ignore_type_subclasses=False, iterable_compare_func=None, log_frequency_in_sec=0, math_epsilon=None, max_diffs=None, max_passes=10000000, number_format_notation="f", number_to_string_func=None, progress_logger=logger.info, report_repetition=False, significant_digits=None, truncate_datetime=None, verbose_level=1, view=TEXT_VIEW, _original_type=None, _parameters=None, _shared_parameters=None, **kwargs):

除了这些,还可以

DeepSearch使用

查找指定元素是否存在

demo如下:

from  deepdiff import DeepSearch
jsonone={
    'code':1,
    "message":"成功",
    'data':{
        'id':1
print(DeepSearch(jsonone,"id"))
print(DeepSearch(jsonone,"name"))

结果如下:

{'matched_paths': ["root['data']['id']"]}
{}

结果可以看到,如果字段不存在,就返回空字典,这样也方便了我们在测试中的使用

DeepHash使用

主要用来对对象进行hash运算

from  deepdiff import DeepHash
jsonone={
    'code':1,
    "message":"成功",
    'data':{
        'id':1
print(DeepHash(jsonone))

可以打印对应的hash,对比hash。