Python读取JSON文件

本文介绍了如何使用Python的json模块读取并解析JSON格式的GDP数据,通过Matplotlib生成柱状图展示中国、美国等五国从2001年至2016年的GDP对比,以及使用Pygal展示人均GDP数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

教程前面章节曾介绍过 JSON 格式的数据,这种格式的数据通常会被转换为 Python 的 list 列表或 dict 字典。本节展示的是世界各国历年 GDP 总和,数据来源于 https://datahub.io 网站。数据格式如下:

[{"Country Code":"ARB","Country Name":"Arab World",

"Value":25760683041.0857,"Year":1968},

{"Country Code:"ARB", "country Name":"Arab World",

"Value":28434203615.4829, "Year":1969},

...

]

上面的 JSON 格式数据被保存在方括号内,这些数据将会被转换为 Python 的 list 列表,而 list 列表的每个元素将会是一个 dict 对象。

使用 Python 的 json 模块读取 JSON 数据非常简单,只要使用 load() 函数加载 JSON 数据即可。下面程序示范了读取 2016 年中国的 GDP 值:

上面程序中,第 6 行代码调用 json 模块的 load() 函数加载 JSON 数据,该函数将会返回一个 list 列表,接下来程序遍历该 list 列表即可访问到指定年份、指定国家的 GDP 值。

运行上面程序,可以看到如下输出结果:

China 11199145157649.2

在掌握了使用 json 模块读取这份 JSON 数据的方法之后,接下来我们将会从中读取从 2001 年到 2016 年中国、美国、日本、俄罗斯、加拿大这 5 个国家的 GDP 数据,并使用柱状图进行对比。

下面程序将会使用 Matplotlib 生成柱状图来展示这 5 个国家的 GDP 数据:

本程序的重点其实在于前半部分代码,这部分代码控制程序从 JSON 数据中只读取中国、美国、日本、俄罗斯、加拿大这 5 个国家的数据,且只读取从 2001 年到 2016 年的 GDP 数据,因此程序处理起来稍微有点麻烦(程序先以年份为 key 的 dict(如程序中 country_gdps 列表的元素所示)来保存各国的 GDP 数据。

但由于 Matplotlib 要求被展示数据是 list 列表,因此上面程序中的第 26、28 两行代码使用循环依次读取从 2001 年到 2016 年的 GDP 数据,并将这些数据添加到 country_gdp_list 列表的元素中。这样就把 dict 形式的 GDP 数据转换成 list 形式的 GDP 数据。

上面程序中的第 35、37 两行代码采用循环添加了 5 组柱状图,接下来程序还在中国、美国的条柱上绘制了 GDP 值。

运行上面程序,可以看到如图 1 所示的柱状图。

图 1 从 2001 年到 2016 年各国GDP 对比柱状图

如果通过 https://datahub.io 网站下载了世界各国人口数据,就可以计算出以上各国的人均 GDP。下面程序会使用 Pygal 来展示世界各国的人均 GDP 数据。

上面程序中,第 11 行代码加载了一份新的关于人口数据的 JSON 文件,这样程序即可通过该文件获取世界各国历史的人口数据。第 28 行代码使用 GDP 总值除以该国的人口数量,这样就可以得到该国的人均 GDP。

此程序的后半部分代码创建了 pygal.Bar 对象,并使用循环为该对象添加了各国人均 GDP 数据,这样该柱状图就可以展示各国的人均 GDP 值。

运行上面程序,可以看到如图 2 所示的柱状图。

图 2 从 2001 年到 2016 年各国人均 GDP 对比柱状图

<think>好的,用户想了解如何用Python读取JSON文件。首先,我需要回忆一下Python处理JSON的标准库。记得json模块是用来处理JSON数据的,对吧?对,json模块提供了load和loads方法,其中load用于文件对象,而loads用于字符串。 接下来,应该分步骤解释。第一步肯定是导入json模块。然后,使用open函数打开文件,最好用with语句来确保文件正确关闭。这时候需要注意文件路径是否正确,还有打开模式是读模式'r'。 然后,使用json.load()方法加载文件内容,这样可以直接得到Python的数据结构,比如字典或列表。需要提醒用户注意可能的异常处理,比如文件不存在或者JSON格式错误的情况,这时候应该用try-except块来捕获异常,比如FileNotFoundError和json.JSONDecodeError。 可能用户还需要知道如何处理读取后的数据,比如访问其中的键值对。举个例子,如果JSON是一个对象,里面有'name'和'age'这样的键,可以演示如何获取这些值。 另外,用户可能还会问及JSON数组的情况,这时候数据会被解析成列表。需要说明遍历列表的方法。 还有,可能需要提到json.loads()函数,如果用户已经有JSON字符串,可以用这个来解析。不过当前问题主要是读取文件,所以重点在json.load()。 还要注意编码问题,通常JSON文件是utf-8编码的,所以打开文件时要指定encoding='utf-8',尤其是在Windows系统中可能容易出错。 最后,给出一个完整的示例代码,展示整个流程:导入模块、打开文件、加载数据、处理异常,以及访问数据。可能还需要提到格式化输出,比如用json.dumps()来美化打印,帮助用户查看数据结构。 总结步骤应该是: 1. 导入json模块 2. 使用with open打开文件 3. 使用json.load加载数据 4. 异常处理 5. 访问数据示例 需要确保代码示例正确,语法无误,比如正确的缩进和括号使用。同时,提醒用户注意文件路径的问题,相对路径和绝对路径的区别,可能常见错误比如文件不在当前目录下导致的FileNotFoundError。 可能还要提到JSON的结构,如果是嵌套的数据,如何通过多层键来访问,比如data['user']['address']['city']这样的例子。 总之,要分步骤详细说明,确保用户能一步步跟着操作,并理解每个环节的作用和可能遇到的问题。</think>以下是如何使用 Python 读取 JSON 文件的详细步骤说明: ### 一、基础操作步骤 1. **导入标准库** ```python import json ``` 2. **打开并读取文件** ```python with open('data.json', 'r', encoding='utf-8') as f: data = json.load(f) ``` 3. **访问数据** ```python print(data["key"]) # 访问字典类型数据 print(data[0]) # 访问列表类型数据 ``` ### 二、完整示例代码 ```python import json try: with open('example.json', 'r', encoding='utf-8') as file: json_data = json.load(file) print("完整JSON内容:") print(json.dumps(json_data, indent=4, ensure_ascii=False)) # 示例:访问嵌套数据 if 'users' in json_data: for user in json_data['users']: print(f"用户名:{user['name']}, 年龄:{user['age']}") except FileNotFoundError: print("错误:文件未找到") except json.JSONDecodeError: print("错误:JSON格式解析失败") ``` ### 三、关键要点说明 1. **文件模式** 必须使用 `'r'` 读模式,`encoding='utf-8'` 可解决中文乱码问题 2. **数据结构对应关系** | JSON 类型 | Python 类型 | |---------------|-------------| | object | dict | | array | list | | string | str | | number | int/float | | true/false | bool | | null | None | 3. **异常处理必要性** - `FileNotFoundError`: 文件路径错误或不存在 - `JSONDecodeError`: 文件内容不符合JSON格式规范 ### 四、进阶技巧 1. **解析字符串内容** ```python json_str = '{"name": "张三", "age": 25}' data = json.loads(json_str) ``` 2. **处理复杂结构** 使用递归处理嵌套数据: ```python def process_data(item): if isinstance(item, dict): for k, v in item.items(): print(f"键:{k}") process_data(v) elif isinstance(item, list): for i in item: process_data(i) ``` 3. **大数据量处理** 使用 `ijson` 库流式解析: ```python import ijson with open('large_data.json', 'r') as f: for item in ijson.items(f, 'item'): process(item) ``` ### 五、常见问题解决方案 1. **中文乱码问题** 确保文件打开时指定 `encoding='utf-8'`,输出时设置 `ensure_ascii=False` 2. **路径错误处理** 使用 `os.path` 验证路径: ```python import os if not os.path.exists('data.json'): print("文件路径错误") ``` 3. **格式验证工具** 推荐使用 JSONLint (https://jsonlint.com/) 在线验证JSON格式 通过以上步骤,您可以安全高效地完成 JSON 文件读取和基础数据处理。建议在正式项目中始终添加异常处理逻辑,并针对具体数据结构编写相应的访问代码。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值