Omnidiff 是一个用于比较两个 JSON 对象差异的 Python 库。它能够深入分析两个 JSON 对象,找出它们之间的不同字段、在一个对象中存在而另一个对象中缺失的字段。此外,项目还提供了对 JSON 对象进行路径映射、根据通配路径匹配等功能,支持跳过指定路径的比较,提高了比较的灵活性和效率。
- JSON 对象比较:可以精确比较两个 JSON 对象,找出差异字段、一方缺失的字段。
- 通配路径匹配:支持使用通配符(如
*
)来定义路径,方便进行模糊匹配。 - 路径跳过功能:在比较过程中,可以指定跳过某些路径,避免不必要的比较。
- JSON 对象映射:可以根据指定的映射路径和哈希函数对 JSON 对象进行映射转换。
- 性能监测:使用装饰器对函数执行时间进行监测,方便性能优化。
目前该项目未提供标准的安装方式,你可以直接将项目中的 Python 文件复制到你的项目中使用。
该项目依赖以下 Python 库:
copy
:用于深拷贝 JSON 对象。re
:用于正则表达式匹配,处理通配路径。time
:用于函数执行时间监测。jmespath
:用于从 JSON 对象中提取指定路径的值。
你可以使用以下命令安装 omnidiff
:
pip install omnidiff
import json
from omnidiff import compare, CompareResult
a_json = {
"name": "Alice",
"age": 25,
"hobbies": ["reading", "swimming"]
}
b_json = {
"name": "Bob",
"age": 30,
"hobbies": ["running", "swimming"]
}
result = compare(a_json, b_json)
print("不同字段:", result.diff_fields)
print("A 中缺失的字段:", result.a_missing_fields)
print("B 中缺失的字段:", result.b_missing_fields)
skip_paths = ["age"]
result = compare(a_json, b_json, skip_paths)
from omnidiff import map_jmespath
def hash_func(node):
return str(hash(node))
json_obj = ["apple", "banana", "cherry"]
mapped_obj = map_jmespath(json_obj, "@", hash_func)
print(mapped_obj)
compare
函数:比较两个 JSON 对象,返回CompareResult
类的实例,包含差异字段、一方缺失的字段信息。match_wildcard
函数:判断路径是否与通配路径匹配。map_jmespath
函数:根据指定的映射路径和哈希函数对 JSON 对象进行映射转换。get_jmespath
函数:获取 JSON 对象中所有路径的列表,可以跳过指定路径。CompareResult
类:用于存储比较结果,包含diff_fields
(差异字段)、a_missing_fields
(A 中缺失的字段)、b_missing_fields
(B 中缺失的字段)。
- 在使用
compare
函数时,确保输入的是有效的 JSON 对象。 - 对于通配路径,使用
*
作为通配符,目前仅支持匹配数字。 - 当使用
map_jmespath
函数时,确保哈希函数hash_func
能够正确处理 JSON 对象中的元素。
如果你发现项目存在问题或有改进建议,欢迎提交 Issues 或 Pull Requests。同时,也欢迎你参与项目的开发和维护,共同完善 Omnidiff 项目。