Python 使用 JSON Diff 比较多级 JSON 对象
本文旨在演示我们如何比较两个多级 JSON 对象并确定它们是否相同。
在 Python 中比较多级 JSON 对象
JSON 对象是 JavaScript Object Notation 的缩写,主要用于交换数据,通常被认为是非常轻量级的。 它的主要优点之一是它可以很容易地被人类和机器理解——就像易于解析一样,允许设备提取有价值的信息。
由于它的频繁使用,我们可能出于某种原因需要比较两个对象。 可以检查它们的内容是否相同或用于其他目的。
考虑以下代码:
obj1 = {"countries":[
{
"name":"Great Britian",
"cities":[
{"name":"Manchester"},
{"name":"London"}
]
}
]}
obj2 = {"countries":[
{
"name":"Great Britian",
"cities":[
{"name":"London"}
]
}
]}
代码片段显示我们有两个 JSON 对象存储有关国家及其城市的信息。 这里需要注意的一件有趣的事情是它们是多层次的,这意味着对象包含更多嵌套在其中的 JSON 对象。
在 Python 中使用相等运算符比较多级 JSON 对象
在深入研究任何第三方库之前,最好通过标准 Python 函数检查我们的任务是否可行。 对我们来说幸运的是,平等对我们的用例同样适用。
不过,如果您需要对变量进行更多控制,例如过滤数据或查找特定更改,您可能需要使用第三方库,因为相等运算符无法提供人们可能需要的灵活性。 对于更直接的情况,使用相等运算符就足够了。
考虑以下代码:
obj1 = {
"errors": [
{"error": "err1", "fld": "mail"},
{"error": "err2", "fld": "name"}
],
"success": "false"
}
obj2 = {
"errors": [
{"error": "err1", "fld": "mail"},
{"error": "err2", "fld": "name"}
],
"success": "false"
}
obj3 = {
"errors": [
{"error": "err1", "fld": "mail"},
{"error": "err2", "fld": "name"},
{"error": "err3", "fld": "time"}
],
"success": "false"
}
print(obj1 == obj2)
print(obj2 == obj3)
输出:
True
False
下面可以看到声明了三个JSON对象,其中两个相同,一个不同。 使用相等运算符,我们可以确定它们是否相同。
这种方法比任何第三方库都更易于实施,并且省去了查看库文档的麻烦。 另一方面,它没有提供太多功能,如果需要,可以使用第三方模块/库来实现。
在 Python 中使用 jsondiff 比较多级 JSON 对象
jsondiff 是一个第三方开源模块,可用于区分 JSON 和类 JSON 结构。 使用这个库,可以很容易地找到 JSON 对象之间的差异,无论它们是多层次的还是无序的。
在开始查看我们如何做到这一点之前,让我们首先安装 jsondiff,因为它是第三方模块并且没有内置在任何标准 Python 安装中。
jsondiff 安装指南
打开命令提示符并执行以下命令开始安装 jsondiff:
$ pip install jsondiff
输出:
Collecting jsondiff
Downloading jsondiff-2.0.0-py3-none-any.whl (6.6 kB)
Installing collected packages: jsondiff
Successfully installed jsondiff-2.0.0
安装 jsondiff 后,我们可以开始使用它来完成我们的任务。
考虑以下代码:
import jsondiff
obj1 = {"countries":[
{
"name":"Great Britian",
"cities":[
{"name":"Manchester"},
{"name":"London"}
]
}
]}
obj2 = {"countries":[
{
"name":"Great Britian",
"cities":[
{"name":"Manchester"},
{"name":"London"}
]
}
]}
res = jsondiff.diff(obj1, obj2)
if res:
print("Diff found")
else:
print("Same")
输出:
Same
在下面的代码中,我们使用了第三方库jsondiff来判断两个对象是否相同。 更具体地说,我们使用函数 jsondiff.diff()
,传递名为 obj1 和 obj2 的 JSON 对象。
jsondiff.diff 的工作原理是,如果它发现任何更改,就会返回它们,我们将这些更改保存在一个名为 res 的变量中。 是否有差异,我们可以快速判断比较对象是相同还是不同。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。