迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

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 中进行多项选择。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便