迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 使用 JSON Diff 比较多级 JSON 对象

作者:迹忆客 最近更新:2023/04/25 浏览次数:

本文旨在演示我们如何比较两个多级 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 的变量中。 是否有差异,我们可以快速判断比较对象是相同还是不同。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便