Python轻松入门:如何读取本地JSON文件
在当今的数据驱动时代,JSON(JavaScript Object Notation)因其轻量级、易读、易于解析的特点,已成为数据交换的事实标准,无论是配置文件、API响应,还是数据存储,我们都能看到它的身影,作为Python开发者,如何高效地读取本地JSON文件是一项必备技能,本文将为你详细讲解使用Python读取本地JSON文件的多种方法,从最基础的到更健壮的实践,助你轻松驾驭JSON数据。
准备工作:创建一个JSON文件
在开始编码之前,我们先在本地创建一个示例JSON文件,以便后续操作,假设我们在项目根目录下创建一个名为 data.json 的文件,内容如下:
{
"name": "张三",
"age": 30,
"isStudent": false,
"courses": [
"Python编程",
"数据分析",
"机器学习入门"
],
"address": {
"city": "北京",
"district": "海淀区"
}
}
这个文件包含了字符串、数字、布尔值、数组和嵌套对象,是一个很典型的JSON结构。
核心方法:使用 json 模块
Python标准库中内置了一个强大的 json 模块,它提供了将JSON数据转换为Python对象(反序列化)以及将Python对象转换为JSON数据(序列化)的功能,读取本地JSON文件主要使用 json.load() 和 json.loads() 两个函数,它们之间有一个关键区别:
json.load(file_object): 从一个文件对象中读取JSON数据,并将其解析为Python对象,这是读取本地文件最常用的方法。json.loads(json_string): 从一个JSON格式的字符串中解析数据,当你已经将文件内容读入内存为一个字符串时使用。
示例一:基础读取与数据访问
下面是最基础的读取 data.json 文件的代码。
import json
# 1. 使用 with open() 语句打开文件
# 'r' 表示以只读模式打开,encoding='utf-8' 是一个好习惯,可以避免编码问题
with open('data.json', 'r', encoding='utf-8') as file:
# 2. 使用 json.load() 将文件内容解析为Python字典
data = json.load(file)
# 3. data 就是一个标准的Python字典,我们可以像操作字典一样访问数据
print(f"姓名: {data['name']}")
print(f"年龄: {data['age']}")
print(f"是否是学生: {data['isStudent']}")
print(f"课程列表: {data['courses']}")
# 访问嵌套在字典中的数据
print(f"所在城市: {data['address']['city']}")
代码解析:
import json: 导入Python内置的json模块。with open(...) as file: 这是最推荐的文件打开方式,它能确保文件在操作完成后被自动关闭,即使发生错误也不例外,非常安全。'r': 指定以读取模式打开文件。encoding='utf-8': 明确指定文件编码为UTF-8,这对于处理包含非英文字符(如中文)的JSON文件至关重要。json.load(file): 这是核心步骤。json.load()会读取文件指针file所指向的整个文件内容,并将其转换成对应的Python数据类型。- JSON的
object-> Python的dict(字典) - JSON的
array-> Python的list(列表) - JSON的
string-> Python的str(字符串) - JSON的
number(int) -> Python的int(整数) - JSON的
number(float) -> Python的float(浮点数) - JSON的
true/false-> Python的True/False(布尔值) - JSON的
null-> Python的None
- JSON的
输出结果:
姓名: 张三
年龄: 30
是否是学生: False
课程列表: ['Python编程', '数据分析', '机器学习入门']
所在城市: 北京
示例二:处理文件不存在或JSON格式错误
在实际应用中,文件可能不存在,或者文件内容可能不是一个合法的JSON格式,直接运行 json.load() 会导致程序崩溃,我们需要使用 try...except 语句来捕获这些异常,使程序更加健壮。
import json
import os # 使用os模块来检查文件是否存在
file_path = 'non_existent_file.json' # 故意使用一个不存在的文件路径
# 检查文件是否存在
if not os.path.exists(file_path):
print(f"错误:文件 '{file_path}' 不存在!")
else:
try:
with open(file_path, 'r', encoding='utf-8') as file:
data = json.load(file)
print("文件读取成功!")
print(data)
except json.JSONDecodeError:
print(f"错误:文件 '{file_path}' 的内容不是有效的JSON格式!")
except Exception as e:
print(f"发生未知错误: {e}")
# 现在尝试读取一个格式错误的JSON文件
bad_json_path = 'bad_data.json'
with open(bad_json_path, 'w', encoding='utf-8') as f:
f.write('{"name": "李四", "age": 25,}') # 注意末尾的多余逗号,这是无效的JSON
print("\n--- 尝试读取格式错误的文件 ---")
try:
with open(bad_json_path, 'r', encoding='utf-8') as file:
data = json.load(file)
print(data)
except json.JSONDecodeError:
print(f"错误:文件 '{bad_json_path}' 的内容不是有效的JSON格式!")
输出结果:
错误:文件 'non_existent_file.json' 不存在!
--- 尝试读取格式错误的文件 ---
错误:文件 'bad_data.json' 的内容不是有效的JSON格式!
通过这种方式,你的程序在面对异常情况时不会直接崩溃,而是可以优雅地处理错误并给出提示。
总结与最佳实践
通过本文的学习,你已经了在Python中读取本地JSON文件的核心技能,让我们来总结一下关键点和最佳实践:
- 首选
json.load(): 读取本地文件时,始终使用json.load(file_object)。 - 使用
with open(): 始终使用with语句来打开文件,它能确保资源被正确释放。 - 指定编码: 在打开文件时,养成指定
encoding='utf-8'的好习惯,避免因编码问题导致的乱码或错误。 - 处理异常: 使用
try...except结构来捕获FileNotFoundError(或先os.path.exists检查)和json.JSONDecodeError,让你的程序更加健壮和可靠。 - 理解数据映射: 清楚地知道JSON数据类型是如何映射到Python数据类型的,这对于后续的数据处理至关重要。
了这些知识,你就可以自信地在项目中处理JSON配置文件、读取本地数据集,并为更复杂的数据分析任务打下坚实的基础,希望本文对你有所帮助!



还没有评论,来说两句吧...