如何从 Python 函数返回 JSON 对象?

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

引言

JSON (JavaScript Object Notation) 由于其简洁性和可读性,已成为一种广泛采用的数据交换格式。在 Python 编程领域,处理 JSON 是一项常见的任务,尤其是在构建 API 或与 Web 服务交互时。其中一个基本方面是从 Python 函数返回 JSON 对象。在本文中,我们将探讨实现此目的的各种方法和最佳实践,以满足不同的用例和场景。

理解 JSON

在深入探讨从 Python 函数返回 JSON 的详细信息之前,了解 JSON 是什么至关重要。JSON 是一种轻量级数据交换格式,易于人类阅读和编写,也易于机器解析和生成。它主要由键值对组成,并支持各种数据类型,包括对象、数组、字符串、数字、布尔值和 null。

从 Python 函数返回 JSON 的方法

使用 json 模块

json 模块是 Python 标准库的一部分,提供了编码和解码 JSON 数据的方法。要从 Python 函数返回 JSON 对象,可以使用 json.dumps() 函数将 Python 对象转换为 JSON 格式的字符串。

输出

{"key": "value", "number": 42, "is_valid": true}

上面的 return_json_object() 函数创建了一个字典,使用 json.dumps() 将其转换为 JSON 格式的字符串,然后返回结果。

使用 flask 框架

如果您正在使用 Flask 框架构建 Web 应用程序,那么返回 JSON 会更加简单。Flask 提供了一个 jsonify() 函数,该函数不仅可以将 Python 对象转换为 JSON,还可以设置适当的响应头。

在此示例中,get_json() 函数使用 jsonify() 返回 JSON 响应。

使用 default 参数进行自定义序列化

当处理无法原生序列化为 JSON 的复杂 Python 对象时,您可以使用 json.dumps() 中的 default 参数。此参数接受一个返回对象的序列化版本的函数。

输出

{"custom_obj": {"custom_key": "custom_value"}, "number": 42}

在这里,custom_serializer() 是一个将自定义对象 (MyCustomObject) 转换为字典的函数,从而可以将其序列化为 JSON。

使用 dataclasses 模块

如果您使用的是 Python 3.7 或更高版本,则可以使用 dataclasses 模块创建简单、不可变的类。这些类可以使用 dataclasses 模块中的 asdict() 函数轻松转换为 JSON。

输出

{"name": "John Doe", "age": 30}

return_person_json() 函数演示了如何使用 asdict() 将 Person 对象转换为 JSON 格式的字符串。

处理日期和时间对象

在 Python 中处理日期和时间对象时,确保正确序列化至关重要。可以通过提供一个函数来处理日期和时间对象来利用 json.dumps() 中的 default 参数来解决此问题。

输出

{"event": "Meeting", "timestamp": "2024-01-19T12:34:56.789012"}

在此示例中,handle_datetime() 函数可确保 datetime 对象正确序列化为其 ISO 格式。

结论

从 Python 函数返回 JSON 对象是许多应用程序(尤其是涉及 Web 开发和 API 设计的应用程序)中常见且至关重要的方面。本文介绍了各种方法,从使用内置的 json 模块到利用 Flask 等框架以及探索自定义序列化技术。方法的选择取决于您项目的具体要求以及您正在处理的数据的性质。了解这些技术可以为您提供在 Python 应用程序中有效处理 JSON 序列化所需的知识。