Python3入门指南Python语言的特点和实际应用Python3环境搭建配置VSCode进行Python开发Python基础语法Python变量与数据类型Python数据类型转换Python解释器使用Python注释使用Python运算符Python数字类型Python字符串操作Python列表操作Python元组使用Python字典使用Python集合使用Python条件控制详解Python循环语句详解Python编程入门实践Python推导式详解Python迭代器和生成器Python with语句详解Python函数详解Python lambda(匿名函数)Python装饰器Python数据结构Python模块和包使用Python中__name__和__main__的用法Python输入输出:从基础到文件操作Python文件操作Python OS模块使用Python错误和异常处理Python面向对象编程Python命名空间和作用域Python虚拟环境:venv详细教程Python类型注解Python标准库常用模块Python正则表达式Python CGI编程Python MySQL(mysql-connector驱动)Python MySQL(PyMySQL驱动)Python网络编程Python发送邮件Python多线程编程Python XML解析Python JSON解析Python日期和时间处理Python操作MongoDBPython urllib库使用Python uWSGI 安装与配置Python pip包管理工具Python operator模块Python math模块Python requests模块HTTP请求Python random模块Python OpenAI库Python AI绘画制作Python statistics模块Python hashlib模块:哈希加密Python量化交易Python pyecharts数据可视化Python Selenium网页自动化Python BeautifulSoup网页数据提取Python Scrapy爬虫框架Python Markdown转HTMLPython sys模块Python Pickle模块:数据存储Python subprocess模块Python queue队列模块Python StringIO内存文件操作Python logging日志记录Python datetime日期时间处理Python re正则表达式Python csv表格数据处理Python threading 多线程编程Python asyncio 异步编程Python PyQt 图形界面开发Python 应用方向和常用库框架

Python JSON解析

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 类型
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull

JSON 解码为 Python 时:

JSON 类型Python 数据类型
objectdict
arraylist
stringstr
number (整数)int
number (浮点数)float
trueTrue
falseFalse
nullNone

这里有几点需要注意:

  • 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模块还能直接读写文件。这时我们会用到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数据。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/course/36_2117

目录选择