JSON是一种非常流行的数据交换格式。它采用完全独立于编程语言的文本格式,但使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成。
如果你对JSON格式本身还不熟悉,建议先查阅相关的入门资料,比如fly63教程上的JSON部分,那里有非常详细的介绍。
在Python3中,处理JSON数据主要依赖内置的json模块。这个模块不需要额外安装,可以直接导入使用。它提供了两个核心函数,用于在Python数据和JSON字符串之间进行转换。
json.dumps(): 这个函数负责“编码”。它将Python的数据类型(如字典、列表)转换成一个JSON格式的字符串。
json.loads(): 这个函数负责“解码”。它将一个JSON格式的字符串转换成对应的Python数据类型。
简单来说,dumps是把Python数据“转出去”变成JSON字符串,而loads是把JSON字符串“拿进来”变成Python数据。
在编码和解码的过程中,Python的数据类型和JSON的数据类型会自动进行转换。下面的表格清晰地展示了它们之间的对应关系。
Python 编码为 JSON 时:
| Python 数据类型 | JSON 类型 |
|---|---|
| dict | object |
| list, tuple | array |
| str | string |
| int, float | number |
| True | true |
| False | false |
| None | null |
JSON 解码为 Python 时:
| JSON 类型 | Python 数据类型 |
|---|---|
| object | dict |
| array | list |
| string | str |
| number (整数) | int |
| number (浮点数) | float |
| true | True |
| false | False |
| null | None |
这里有几点需要注意:
Python中的元组(tuple)在编码成JSON时,会被当作数组(array)处理。解码回来时,JSON数组默认只转换为Python列表(list),不会变回元组。
JSON中的对象(object)解码后,在Python里是字典(dict)。
JSON没有像Python那样严格的整数和浮点数区分,转换时会根据数值本身来决定转换成Python的int还是float。
让我们通过一些实际的代码来看看这些函数是如何工作的。
1. 将Python数据转换为JSON字符串
假设我们有一个包含网站信息的Python字典,我们想把它变成JSON字符串。
import json
# 创建一个Python字典
python_data = {
'id': 1,
'name': 'Fly63编程站',
'tags': ['Python', 'JSON', 'Web'],
'is_public': True
}
# 使用 json.dumps() 进行编码
json_string = json.dumps(python_data)
print("Python原始数据:", python_data)
print("转换后的JSON字符串:", json_string)运行这段代码,你会看到类似下面的输出:
Python原始数据: {'id': 1, 'name': 'Fly63编程站', 'tags': ['Python', 'JSON', 'Web'], 'is_public': True}
转换后的JSON字符串: {"id": 1, "name": "Fly63\u7f16\u7a0b\u7ad9", "tags": ["Python", "JSON", "Web"], "is_public": true}注意观察变化:Python的True变成了JSON的true,中文字符被转换成了Unicode转义序列(这是dumps的默认行为)。
2. 将JSON字符串转换回Python数据
现在我们有了一个JSON字符串,我们可以把它解析回Python数据。
import json
# 这是一个JSON格式的字符串
json_str = '{"name": "Alice", "age": 25, "courses": ["Math", "Science"]}'
# 使用 json.loads() 进行解码
python_dict = json.loads(json_str)
print("解析后的Python字典:", python_dict)
print("访问name字段:", python_dict['name'])
print("访问courses列表:", python_dict['courses'])输出结果:
解析后的Python字典: {'name': 'Alice', 'age': 25, 'courses': ['Math', 'Science']}
访问name字段: Alice
访问courses列表: ['Math', 'Science']现在,你可以像操作普通Python字典一样来操作这个python_dict了。
除了处理字符串,json模块还能直接读写文件。这时我们会用到json.dump()和json.load()函数(注意没有‘s’)。
json.dump(obj, file):将Python对象obj编码后写入文件对象file。
json.load(file):从文件对象file中读取数据并解码为Python对象。
将数据写入JSON文件
import json
data_to_save = {
'site': 'Fly63',
'url': 'https://www.fly63.com',
'founder': '编程爱好者'
}
# 将数据写入data.json文件
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data_to_save, f, ensure_ascii=False, indent=4) # 参数解释见下文从JSON文件读取数据
import json
# 从data.json文件读取数据
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
print("从文件读取的数据:", loaded_data)在上面的写入例子中,我们使用了两个有用的参数:
ensure_ascii=False:这个参数允许非ASCII字符(如中文)直接保存在JSON中,而不是被转义成\uXXXX的形式,使得文件内容更易读。
indent=4:这个参数让生成的JSON数据带有缩进格式,结构更清晰,非常适合人类阅读和调试。如果不设置,所有数据会挤在一行。
Python的json模块是一个非常强大且易于使用的工具,它架起了Python内部数据和通用JSON格式之间的桥梁。无论是进行网络api交互、配置文件读写,还是在不同系统间传递数据,掌握json模块都是Python程序员的一项基本技能。
记住核心的四函数:
字符串编码:json.dumps()
字符串解码:json.loads()
文件编码写入:json.dump()
文件解码读取:json.load()
通过合理使用这些函数和参数,你可以轻松地在Python程序中处理各种JSON数据。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!