Python中的JSON编码器和解码器包

2025年1月5日 | 阅读6分钟

引言

在本教程中,我们将学习 Python 中的 JSON 编码器和解码器包。JSON 是 JavaScript 对象表示法的缩写。JSON 是一种轻量级的数据交换格式。它类似于 pickle。但是,pickle 序列化是 Python 特有的,而 JSON 格式被许多编程语言使用。Python 标准库中的 Json 模块实现了类似于 pickle 和 marshal 模块的对象序列化。与 pickle 模型一样,json 模块提供了 dumps() 和 loads() 函数,用于将 Python 对象序列化为 JSON 编码的字符串。dump() 和 load() 函数用于序列化写入或读取自文件的 Python 对象。

如何开始使用 Python 中的 JSON 编码器和解码器包?

Python 提供了内置的 json 库来处理 JSON 对象。您需要做的就是使用以下命令将 JSON 模块导入您的 Python 程序,并开始使用其函数。

现在,JSON 模块有很多函数,我们将只讨论其中的 2 个。它们是 dumps 和 loads。将 Python 对象转换为 json 对象的过程称为 JSON 序列化或编码。将 json 对象转换为 Python 对象是一个逆过程,称为反序列化或解码。我们将使用 json.dumps() 进行编码,使用 json.loads() 进行解码。显然,dumps 方法会将 Python 对象转换为 JSON 字符串,而加载过程将从序列化的 JSON 字符串解析 Python 对象。

值得注意的是,序列化过程中创建的 JSON 对象只是一个 Python 字符串。因此,您将在本教程中看到“JSON 对象”和“JSON 字符串”这两个术语。因此,当您使用 load 方法时,默认会返回 Python 字典(除非您按照教程的自定义部分中所述的方式更改此行为)。

程序代码 1

这里,我们提供了一个使用 Python 中的 JSON 编码器和解码器包的程序代码。代码如下:

输出

现在我们编译上面的代码并从中找到结果。输出如下:

{"a": 0, "b": 1, "c": 2, "d": 3}
<class 'str'>

{'a': 0, 'b': 1, 'c': 2, 'd': 3}
<class 'dict'>

程序代码 2

这里,我们提供另一个使用 Python 中的 JSON 编码器和解码器包的程序代码。代码如下:

输出

现在我们编译上面的代码并从中找到结果。输出如下:

["Priyanka", {"marks": [90, 60, 80]}]
['Priyanka', {'marks': [90, 60, 80]}]
{"age": 24, "marks": 90, "rank": 2}
{'age': 24, 'marks': 90, 'rank': 2}

编码和解码 Python 中的自定义对象

在这种情况下,我们需要在序列化方面付出更多的努力。让我们看看如何做到这一点。假设我们有一个使用学生的类,并希望使其可 JSON 序列化。最简单的方法是在我们的类中定义一个方法,该方法将返回我们类实例的 JSON 版本。

程序代码 1

这里,我们提供了一个用于编码和解码 Python 中自定义对象的程序代码。代码如下:

输出

现在我们编译上面的代码并从中找到结果。输出如下:

{
    "name": "Priyanka",
    "roll_no": 40,
    "age": 24,
    "address": {
        "city": "Bhatpara",
        "state": "West Bengal",
        "pin": "743123"
    }
}
<class 'str'>
{'name': 'Priyanka', 'roll_no': 40, 'age': 24, 'address': {'city': 'Bhatpara', 'state': 'West Bengal', 'pin': '743123'}}
<class 'dict'>

程序代码 2

这里,我们提供另一个用于编码和解码 Python 中自定义对象的程序代码。实现这一目标的一种方法是创建一个扩展 JSONEncoder 的新类,然后将此类作为参数传递给 dumps 方法。代码如下:

输出

现在我们编译上面的代码并从中找到结果。输出如下:

{
    "name": "Priyanka",
    "roll_no": 40,
    "age": 24,
    "address": {
        "city": "Bhatpara",
        "state": "West Bengal",
        "pin": "743123"
    }
}
<class 'str'>

{'name': 'Priyanka', 'roll_no': 40, 'age': 24, 'address': {'city': 'Bhatpara', 'state': 'West Bengal', 'pin': '743123'}}
<class 'dict'>

Python 中的自定义解码

在自定义解码中,如果我们想将 JSON 转换为另一个 Python 对象(而不是原始或默认字典,例如),这是一种非常简单的方法;就是使用 loads 方法的 object_hook 参数。我们所要做的就是定义一个方法来定义我们想要如何处理数据,然后将该方法作为 object_hook 参数传递给 load 方法;请参阅提供的代码。此外,返回的对象将不再是 Python 字典。即使我们传递的方法的返回类型是 Object_hook,它仍然是 load 方法的返回类型。

程序代码

这里,我们提供了一个用于 Python 中自定义解码的程序代码。代码如下:

输出

现在我们编译上面的代码并从中找到结果。输出如下:

The result is: (1+2j)
The type of the result is: <class 'complex'>

在 Python 中使用编码和解码自定义对象的优势

使用 Python 的 json 模块创建自定义编码器和自定义解码器具有多种优势,如下所示:

1. 自定义数据管理

自定义编码器和解码器可以将复杂的 Python 对象或未格式化的数据序列化和反序列化为 JSON 格式(或反之亦然)。

2. 控制和灵活性

开发人员可以更好地控制自定义数据类型如何进入 JSON 并解码为 Python 对象,从而确保数据传输过程中的准确性和一致性。

3. 兼容性和互操作性

通过使用自定义编码器和解码器,开发人员可以确保 Python 文件与其他使用 JSON 作为数据交换格式的系统之间无缝兼容。

4. 自定义序列化逻辑

您可以自定义序列化和反序列化逻辑来管理私有数据或复杂对象,并简化不同系统或数据存储之间的数据交换。

结论

因此,在本教程中,我们学习了 Python 中的 JSON 编码器和解码器包。json 模块提供了 dumps() 和 loads() 函数,用于将 Python 对象序列化为 JSON 编码的字符串。因此,Python 的 json 模块中创建自定义编码器和解码器的能力使开发人员能够有效地管理不同数据集的序列化和反序列化,从而提供控制、灵活性和数据转换的更改。这些工具确保了 Python 应用程序在处理复杂文件或自定义类时的一致性和互操作性。


下一个主题Python http headers