JSON比较器

jsoncomparison的Python项目详细描述


json比较包

Build StatusLicense: MIT

这个包设计用来比较两个具有类似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方法返回expectedactual对象之间差异的字典,并报告它。

差异输出:

{"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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java未从Facebook OAuth接收名字、姓氏和姓氏   我自己代码中的java ConcurrentModificationException   java在Android上获得单像素TIFF图像   java图形输出中的swing集成弹出窗口“通知”   将数据库表中的所有数据集插入jTable Java   java如何使用Hibernate获取不完整的集合?   打印无法从java连接到打印机   java使用分隔符拆分带引号的字符串   java Axis2禁用严格验证(wsdl2java中的Eosv)允许什么,如何使其更加严格?   java有人能帮我处理循环代码吗   java将JsonObject数组转换为整数   JavaXWiki扩展:检测事件空间创建   java如何设置图表的文本方向以使用poi旋转所有文本?   eche RecyclerView项的java Set自定义字体   java单元测试带有私有构造函数的spring组件,无需注入   用户界面如何在java中动态显示一组多个元素?   如何从java应用程序调用IDL(交互式数据语言)?   Java的内置库实现