news 2026/3/9 16:25:39

Python - JSON

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python - JSON

Python 中的 JSON

Python 中的 JSON 是一种用于系统间数据交换的常用数据格式。json模块提供了处理JSON数据的函数,允许你将Python对象序列化成JSON字符串,并将JSON字符串反序列化回Python对象。

JSON(JavaScript对象符号)是一种轻量级的数据交换格式,易于人类阅读和写入,机器也易于解析和生成。它主要用于服务器与网页应用之间的文本传输数据。

JSON 序列化

JSON 序列化是将 Python 对象转换为 JSON 格式的过程。这对于保存数据格式方便传输或存储,之后还能重建为原始形式非常有用。

Python 提供了JSON模块来处理 JSON 序列化和反序列化。我们可以在本模块中使用json.dumps()方法进行序列化。

你可以将以下 Python 对象类型序列化为 JSON 字符串 −

  • dict
  • list
  • tuple
  • str
  • int
  • float
  • bool
  • None

示例

按照一个基本示例,了解如何将 Python 字典序列化为 JSON 字符串 −

import json # Python dictionary data = {"name": "Alice", "age": 30, "city": "New York"} # Serialize to JSON string json_string = json.dumps(data) print(json_string)

它将产生以下输出 −

{"name": "Alice", "age": 30, "city": "New York"}

JSON 反序列化

JSON 反序列化是将 JSON 字符串转换回 Python 对象的过程。这对于读取和处理以 JSON 格式传输或存储的数据至关重要。

在 Python 中,我们可以使用 json.loads() 方法将 JSON 数据从字符串反序列化,使用 json.load() 方法将 JSON 数据从文件反序列化。

示例:将 JSON 字符串反序列化为 Python 对象

在下面的例子中,我们使用 json.loads() 方法 − 将 JSON 字符串反序列化成 Python 字典

import json # JSON string json_string = '{"name": "John", "age": 30, "is_student": false, "courses": ["Math", "Science"], "address": {"city": "New York", "state": "NY"}}' # Deserialize JSON string to Python object python_obj = json.loads(json_string) print(python_obj)

以下是上述代码−的输出

{'name': 'John', 'age': 30, 'is_student': False, 'courses': ['Math', 'Science'], 'address': {'city': 'New York', 'state': 'NY'}}

示例:从文件中反序列化 JSON

现在,要读取和反序列化文件中的 JSON 数据,我们使用 json.load() 方法——

import json # Read and deserialize from file with open("data.json", "r") as f: python_obj = json.load(f) print(python_obj)

上述代码的输出如下 −

{'name': 'John', 'age': 30, 'is_student': False, 'courses': ['Math', 'Science'], 'address': {'city': 'New York', 'state': 'NY'}}

高级 JSON 处理

如果你的 JSON 数据包含需要特殊处理的对象(例如自定义类),你可以自定义反序列化函数。使用json.loads()或json.load()方法的object_hook参数,指定一个函数调用,调用每个解码后的JSON对象的结果。

示例

在下面的示例中,我们演示了自定义对象序列化的使用 −

import json from datetime import datetime # Custom deserialization function def custom_deserializer(dct): if 'joined' in dct: dct['joined'] = datetime.fromisoformat(dct['joined']) return dct # JSON string with datetime json_string = '{"name": "John", "joined": "2021-05-17T10:15:00"}' # Deserialize with custom function python_obj = json.loads(json_string, object_hook=custom_deserializer) print(python_obj)

我们得到如下所示的输出−

{'name': 'John', 'joined': datetime.datetime(2021, 5, 17, 10, 15)}

JSONEncoder Class

Python 中的JSONEncoder类用于将 Python 数据结构编码为 JSON 格式。每个 Python 数据类型都被转换为对应的 JSON 类型,如下表所示 −

PythonJSON
Dictobject
list, tuplearray
Strstring
int, float, int- & float-derived Enumsnumber
Truetrue
Falsefalse
Nonenull

JSONEncoder类是使用JSONEncoder()构造函数实例化的。本类中定义了以下重要方法:

  • encode(obj)− JSONEncoder类是使用JSONEncoder()构造函数实例化的。本类中定义了以下重要方法:

  • iterencode(obj)− 对对象进行编码,并返回一个迭代器,该迭代器生成对象中每个项目的编码形式。

  • indent− 确定编码字符串的缩进级别。

  • sort_keys− 如果为True,则键按排序顺序显示。

  • check_circular− 如果为True,则检查容器类型对象中的循环引用。

示例

在下面的例子中,我们正在编码 Python 列表对象。我们使用 iterencode() 方法显示编码字符串的每个部分 −

import json data = ['Rakesh', {'marks': (50, 60, 70)}] e = json.JSONEncoder() # Using iterencode() method for obj in e.iterencode(data): print(obj)

它将产生以下输出 −

["Rakesh", { "marks" : [50, 60, 70]}]

JSONDecoder class

JSONDecoder类用于将 JSON 字符串解码回 Python 数据结构。该类的主要方法是 decode()。

示例

在这个例子中,“JSONEncoder”用于将Python列表编码成JSON字符串,然后用“JSONDecoder”将JSON字符串解码回Python列表——

import json data = ['Rakesh', {'marks': (50, 60, 70)}] e = json.JSONEncoder() s = e.encode(data) d = json.JSONDecoder() obj = d.decode(s) print(obj, type(obj))

得到的结果如下所示 −

['Rakesh', {'marks': [50, 60, 70]}] <class 'list'>

Python JSON 模块方法

Python 中的json模块提供了处理 JSON(JavaScript 对象符号)的方法。它允许你将 Python 对象序列化和反序列化,用于与 JSON 格式之间的转换,这是一种常用的数据交换格式。

核心职能

json模块的核心功能允许你序列化和反序列化JSON数据。

Sr.No。功能与描述
1json.dump()https://www.tutorialspoint.com/python/json_dump_function.htm

序列化 Python 对象并将其写入类似文件的对象。

2json.dumps()

序列化一个 Python 对象,并返回为 JSON 格式的字符串。

3json.load()

将 JSON 格式的流反序列化为 Python 对象。

4json.loads()

将JSON格式的字符串反序列化成Python对象。

JSON 编码方法

JSON 编码器方法处理 Python 对象转换为 JSON 格式。

Sr.No。功能与描述
1json.JSONEncoder

用于将 Python 对象转换为 JSON 格式的编码器类。

2json.JSONEncoder.encode()

将 Python 对象编码为 JSON 格式,作为字符串。

3json.JSONEncoder.iterencode()

将 Python 对象编码为迭代器格式的 JSON 格式。

4json.JSONEncoder.default()

覆盖处理默认不可序列化对象的方法。

JSON 解码器方法

JSON 解码器方法处理将 JSON 数据转换为 Python 对象。

Sr.No。功能与描述
1json.JSONDecoder

用于将JSON数据转换为Python对象的解码器类。

2json.JSONDecoder.decode()

将JSON字符串反序列化成Python对象。

3json.JSONDecoder.raw_decode()

将带有额外信息的 JSON 字符串反序列化,以便错误处理。

效用函数

实用函数为处理 Python 中的 JSON 数据提供了一种简单的方法。

Sr.No。功能与描述
1json.tool

提供命令行工具,用于格式化JSON数据以提高可读性。

Dunder (Magic) Methods in JSONEncoder

这些是JSON模块中JSONEncoder类的特殊方法,使 JSON 序列化能够实现自定义行为。

Sr.No。方法与描述
1json.JSONEncoder.__init__

用自定义设置初始化编码器。

2json.JSONEncoder.__repr__

返回编码器对象的字符串表示。

3json.JSONEncoder.__str__

返回编码器对象的字符串版本。

JSONDecoder 中的 Dunder (Magic) 方法

这些是JSONDecoder类的特殊方法,用于实现JSON反序列化的自定义行为。

Sr.No。方法与描述
1json.JSONDecoder.__init__

用自定义设置初始化解码器。

2json.JSONDecoder.__repr__

返回解码器对象的字符串表示。

3json.JSONDecoder.__str__

返回解码器对象的字符串版本。

json.encoder中的函数(内部实用函数)

这些函数在json.encoder模块内部用于处理特定的编码任务。

Sr.No。功能与描述
1json.encoder.encode_basestring()

将字符串编码成兼容 JSON 的格式。

2json.encoder.encode_basestring_ascii()

将字符串编码为兼容JSON的ASCII格式。

json.decoder中的函数(内部实用函数)

这些函数在json.decoder模块内部用于处理特定的解码任务。

Sr.No。功能与描述
1json.decoder.scanstring()

扫描JSON格式的字符串。

2json.decoder.JSONArray()

处理JSON数组解码。

json 模块中的属性

属性在json模块中提供各种配置设置和常量。

Sr.No。属性与描述
1json.decoder

包含与解码器相关的函数和类。

2json.encoder

包含与编码器相关的函数和类。

3json.__all__

当导入*时导出的模块属性列表。

4json.__version__

json模块的版本号。

Attributes in json.encoder

json.encoder模块编码功能相关的属性。

Sr.No。属性与描述
1json.encoder.FLOAT_REPR

在序列化过程中控制浮点数的表示。

2json.encoder._make_iterencode()

用于创建基于迭代器的编码器的内部实用函数。

json.decoder 中的属性

json.decoder模块中解码功能相关的属性。

Sr.No。属性与描述
1json.decoder.JSONDecoder

用于将JSON数据转换为Python对象的解码器类。

2json.decoder.JSONDecoder.object_hook

用于解析和转换 JSON 对象的函数。

3json.decoder.JSONDecoder.parse_float

函数用于自定义JSON数据中的浮点解码。

4json.decoder.JSONDecoder.parse_int

函数用于在 JSON 数据中自定义整数解码。

5json.decoder.JSONDecoder.parse_constant

用于处理JSON解码时常数值如True、False和None的功能。

6json.decoder.JSONDecoder.object_pairs_hook

用于解析 JSON 对象并控制其键值对的函数。

JSON 中的属性(内部使用)

这些属性是json模块内部使用的。

Sr.No。属性与描述
1json._default_decoder

用于解码JSON数据的默认JSON解码器。

2json._default_encoder

默认的 JSON 编码器,用于将 Python 对象编码成 JSON。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/4 8:16:26

大数据领域数据挖掘的挑战与应对策略

大数据领域数据挖掘的挑战与应对策略 引言 在当今数字化时代&#xff0c;数据以前所未有的速度增长&#xff0c;大数据已成为各个行业创新和发展的核心驱动力。数据挖掘作为从海量数据中提取有价值信息的关键技术&#xff0c;在大数据环境下面临着诸多独特的挑战。深入理解这些…

作者头像 李华
网站建设 2026/3/4 5:29:59

麦浪KTV 3.15.63| 家庭KTV,丰富的歌曲库,支持手机点歌和评分系统

麦浪KTV是一款专为家庭娱乐设计的K歌应用&#xff0c;让您无需出门即可享受KTV的乐趣。这款应用提供了丰富的歌曲库和高清播放体验&#xff0c;使您能够随时随地与家人或朋友一起嗨唱。主要特点包括&#xff1a;丰富的歌曲库&#xff0c;涵盖各种风格的歌曲&#xff0c;满足不同…

作者头像 李华
网站建设 2026/3/4 6:30:56

如何通过智能化手段增强机房动力环境监控系统的安全性与运行效率?

在当今科技迅速发展的背景下&#xff0c;机房动力环境监控系统的智能化建设显得尤为关键。通过实时的数据监测&#xff0c;管理者可以有效跟踪机房内的电能消耗和温湿度变化。当这些指标超过预设的安全范围时&#xff0c;系统能及时给予反馈&#xff0c;帮助管理员做出迅速反应…

作者头像 李华
网站建设 2026/3/4 6:52:13

基于Java的商务执法随机抽检智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 商务执法随机抽检智慧管理系统结合了执法人员管理、抽检区域管理、抽检领域管理、抽检对象管理和抽检记录管理等功能模块&#xff0c;相比传统选题更具创新性和实用性。该系统采用SpringMVC开发框架和MySQL数据库&#xff0c;使零基础开发…

作者头像 李华
网站建设 2026/3/5 13:07:48

智能物流路径规划系统技术指南

智能物流路径规划系统技术指南一、技术路线优劣势分析1. 传统算法路线 优势&#xff1a;计算稳定性强&#xff08;如Dijkstra算法保证最优解&#xff09;资源消耗低&#xff0c;适合嵌入式设备劣势&#xff1a;动态环境适应性差&#xff0c;$$ \Delta t \to 0 $$ 时响应滞后多目…

作者头像 李华
网站建设 2026/3/4 1:27:25

力扣解题步骤

核心思路回顾通过哈希表存储「已遍历元素值 → 下标」的映射&#xff0c;遍历数组时计算当前元素的 “补数”&#xff08;目标值 - 当前值&#xff09;&#xff0c;若补数存在于哈希表中&#xff0c;则直接返回结果&#xff1b;若不存在&#xff0c;将当前元素存入哈希表&#…

作者头像 李华