JSON比较器
jsoncomparison的Python项目详细描述
json比较包
这个包设计用来比较两个具有类似json的结构和数据类型的对象。
安装
pip install jsoncomparison
使用量
首先需要定义两个变量:expected&actual。 将它们看作是在unittests中使用的相同变量。
预期-要查看的原始数据对象。 实际-给定的数据对象。
然后我们将转移这些对象以检查并确定它们之间的差异:
fromjsoncomparisonimportCompareexpected={'project':{'name':'jsoncomparison','version':'0.1','license':'MIT','language':{'name':'python','versions':[3.5,3.6]}},'os':'linux'}actual={'project':{'name':'jsoncomparison','version':0.1,'license':'Apache 2.0','language':{'name':'python','versions':[3.6]}}}diff=Compare().check(expected,actual)assertdiff!={}
check
方法返回expected
和actual
对象之间差异的字典,并报告它。
差异输出:
{"project":{"version":{"_message":"Types not equal. Expected: <str>, received: <float>","_expected":"str","_received":"float"},"license":{"_message":"Values not equal. Expected: <MIT>, received: <Apache 2.0>","_expected":"MIT","_received":"Apache 2.0"},"language":{"versions":{"_length":{"_message":"Lengths not equal. Expected <2>, received: <1>","_expected":2,"_received":1},"_content":{"0":{"_message":"Value not found. Expected <3.5>","_expected":3.5,"_received":null}}}}},"os":{"_message":"Key does not exists. Expected: <os>","_expected":"os","_received":null}}
要检查对象是否相同,只需调用:
diff=Compare().check(expected,actual)self.assertEqual(diff,{})
配置
您可以定义配置文件并将其传输到比较类构造函数。 但首先要确保配置文件的结构类似于this。
示例:
importjsonfromjsoncomparisonimportComparewithopen('config','r')asfp:config=json.load(fp)cmp=Compare(config)
输出
默认情况下,配置文件不允许将比较结果打印到控制台,但同时将结果写入文件。 可以在配置文件中更改这些设置:
{"output":{"console":true,"file":{"name":"my-output-file.json","indent":4}}}
忽略规则
如果不想比较json中对象的一些值和键,该怎么办? 在这种情况下,可以定义异常规则并将其传递给类构造函数。
让我们回到上面的示例:
fromjsoncomparisonimportCompareexpected={# ...}actual={# ...}rules={'project':{'version':'*','license':'*','language':{'versions':{'_values':[3.5]}}},'os':'*',}diff=Compare(rules=rules).check(expected,actual)assertdiff=={}
现在我们已经为丢失的值添加了异常, 比较测试已成功通过!
链接
您可以看到一个更复杂的比较示例,我使用它来测试应用程序的正确操作: link。