理解Python中的JSON数据处理
JSON(JavaScript Object Notation)是一种广泛应用的数据交换格式。Python自带的JSON模块提供了处理JSON数据的强大功能。本文将引导您掌握在Python中使用JSON的方法。
学完本教程,您将能够:
- 理解JSON的基本概念。
- 掌握在Python中解析和生成JSON字符串的技巧。
- 学会如何在Python中读写JSON文件。
让我们开始探索吧!🚀
什么是JSON?
JSON,即JavaScript对象表示法,是一种基于文本的数据交换格式。虽然JSON最初受到JavaScript对象的启发,但现在几乎所有编程语言都支持它。
无论您是使用API接口还是查看配置文件,都有可能接触到JSON。
📑 JSON常用于API的数据传输,以及软件应用中的客户端-服务器通信。此外,JSON还可以作为通用数据存储的格式。
JSON的结构与Python字典非常相似。字典是Python中一种强大的内置数据结构,用于存储键值对。
在深入探讨之前,请注意以下几点:
- 在Python中,JSON对象会被解析为字典。
- JSON中的数组对应于Python列表。
- JSON中的布尔值表示为true和false,在Python中则对应True和False。
更多关于JSON到Python数据类型转换的详细信息,请参考官方文档。
由于json模块是Python标准库的一部分,无需额外安装,可以直接导入:
import json
如何在Python中加载JSON字符串
在Python中加载JSON字符串的基本语法如下:
<dict_obj> = json.loads(<json_str>)
其中:
<dict_obj>
是将要加载JSON字符串的Python字典。<json_str>
是有效的JSON字符串。
此操作会将<json_str>
解析并存储到Python字典<dict_obj>
中。
以下是一个示例。json_str
是一个JSON字符串:
json_str=""" { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ] } """
以下代码展示如何使用loads()
方法将JSON字符串json_str
加载到Python字典中。使用内置的type()
函数可以验证py_dict
确实是一个Python字典。
py_dict = json.loads(json_str) type(py_dict) # 输出: dict print(py_dict) # 输出 {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}
如上述代码所示,JSON字符串中的所有字段都变成了py_dict
中的键值对。
如何在Python中创建JSON字符串
如果有一个Python字典,该如何将其转换为JSON字符串呢?
可以使用dumps()
方法,其语法如下:
<json_str> = json.dumps(<dict_obj>)
其中:
<dict_obj>
是要转换为JSON字符串的Python字典。<json_str>
是生成的JSON字符串。
因此,dumps()
方法会将<dict_obj>
转换为JSON字符串<json_str>
。
让我们在现有的Python字典py_dict
中添加一个新的键”movies”。代码如下:
py_dict["movies"] = [{"title":"The Imitation Game","year":"2014","lang":"en","watched":True}]
现在,使用dumps()
方法将修改后的字典转换为一个新的JSON字符串json_str2
。
json_str2 = json.dumps(py_dict) print(json_str2) # 输出 {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}
如上例所示,未格式化的JSON字符串难以阅读。可以使用可选参数indent
来添加缩进,从而提高可读性。
通过将indent
设置为一个整数,如2,即可实现缩进,如下所示:
json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # 输出 { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ], "movies": [ { "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true } ] }
可以看到,输出已经使用了缩进进行格式化,更易于理解。
注意:💡如果需要按字母顺序对键进行排序,可以将sort_keys
参数设置为True。
如下所示,键现在已按字母顺序排列:
json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # 输出 { "books": [ { "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" }, { "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" } ], "movies": [ { "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" } ] }
键现在按照”author”、”title”和”year”的字母顺序显示。
至此,您已经学习了如何在Python中使用JSON字符串。接下来,您将学习如何使用JSON文件。
如何在Python中读取JSON文件
在Python中读取JSON文件的基本语法如下:
json.load(<json-file>)
其中<json-file>
是有效的JSON文件。
请注意,这里使用的是load()
方法,而不是loads()
方法。 loads()
用于加载JSON字符串,而load()
用于加载JSON文件。
在Python中处理文件时,建议使用上下文管理器。当然,您也可以尝试不使用上下文管理器读取文件:
my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()
如果不关闭文件,可能会造成资源浪费。
而使用上下文管理器时,文件操作完成后会自动关闭。
使用上下文管理器读取文件的代码如下:
with open('students.json','r') as file: data = json.load(file) print(data) # 输出 {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}
从文件中读取数据时,请确保将模式指定为读取模式,即代码中的’r’。
注意:为了方便访问当前目录下的文件,请确保JSON文件与main.py文件位于同一文件夹下。如果JSON文件位于其他文件夹,请指定文件的完整路径。
以下是读取JSON文件的示例。
接下来,您将学习如何写入JSON文件。✍
如何在Python中写入JSON文件
要写入现有的JSON文件或创建新的JSON文件,可以使用dump()
方法,其语法如下:
json.dump(<dict_obj>,<json_file>)
其中:
<dict_obj>
是Python字典。<json_file>
是JSON文件。
以上语法将字典<dict_obj>
写入到JSON文件<json_file>
中。
在前一章节中,我们已经有字典py_dict
。现在,让我们将其写入到一个新的JSON文件中,命名为new_file.json。
以下代码片段展示了如何使用dump()
函数:
with open('new_file.json','w') as file: json.dump(py_dict,file)
注意:以写入模式(‘w’)打开文件会覆盖文件原有的内容。如果文件不存在,则会创建一个新文件。
执行上述代码后,您会在当前工作目录下看到一个新的JSON文件。可以检查该JSON文件的内容。
在Python中创建JSON文件
写入文件时,数据的存储是核心目标。如果需要保留格式,还可以使用indent
和sort_keys
参数。
结论
⏲ 让我们快速回顾一下。
在本教程中,您学习了:
- JSON的基本概念。
- 如何分别使用
loads()
和load()
方法读取JSON字符串和JSON文件。 - 如何分别使用
dumps()
和dump()
方法将Python字典转换为JSON字符串和JSON文件。
希望本教程对您有所帮助。祝您学习愉快!
您还可以探索用于解析、格式化和验证的JSON工具。