1. 什么是JSON?
JSON即JavaScript Object Notation,是一种轻量级数据交换格式,基于JavaScript语言的一个子集,采用完全独立于编程语言的文本格式存储和表示数据。JSON格式的数据可以使用特定的JavaScript函数对其进行解析,将JSON字符串转换为JavaScript对象,方便数据的传递与存储。
1.1 JSON数据格式
JSON数据格式由两种结构组成,分别是键值对和集合(数组),其中键值对由一组属性和对应的值组成,键和值之间由冒号“:”分隔,属性与属性之间则使用逗号“,”分隔,集合则用中括号“[]”包裹,值之间同样使用逗号分隔。比如下面这段JSON数据:
{
"name": "小王",
"age": 18,
"hobby": [
"play games",
"listen to music"
]
}
它的结构可以进行如下解析:
键值对:"name"是属性,"小王"是对应的值;"age"是属性,18是对应的值;"hobby"是属性,后面是一个集合,包含了两个值:play games和listen to music。
集合:整段数据本身也是一种集合结构,用大括号“{}”包裹起来。
1.2 JSON与Python
Python提供了很多操作JSON数据格式的库,最常用的是内置的json模块。使用json模块可以将Python对象转换为JSON格式的数据,也可以将JSON格式的数据转换为Python对象,进而进行序列化、反序列化等操作。
2. 将Python对象转换为JSON数据
使用json模块可以将Python对象转换为JSON格式的数据,其中最常用的方法是dumps()和dump()函数。dumps()函数将Python对象转换为JSON格式的字符串,而dump()函数则将Python对象转换为JSON格式的数据,存储到文件中。
2.1 dumps()函数
使用dumps()函数可以将Python对象转换为JSON格式的字符串,其常用参数及用法如下:
import json
# 将Python对象转换为JSON格式的字符串
json_str = json.dumps(py_obj, indent=4, ensure_ascii=False)
其中,py_obj是Python对象,indent参数为缩进空格数,ensure_ascii参数指定是否对非ASCII字符进行编码,这里设置为False即可保留中文字符。
下面通过一个例子进行测试:
import json
# Python对象
person = {
"name": "小王",
"age": 18,
"hobby": [
"play games",
"listen to music"
]
}
# 将Python对象转换为JSON格式的字符串
json_str = json.dumps(person, indent=4, ensure_ascii=False)
# 输出JSON字符串
print(json_str)
输出结果如下:
{
"name": "小王",
"age": 18,
"hobby": [
"play games",
"listen to music"
]
}
2.2 dump()函数
使用dump()函数可以将Python对象转换为JSON格式的数据,并存储到文件中,其常用参数及用法如下:
import json
# 将Python对象转换为JSON格式的数据,并存储到文件中
with open('person.json', 'w', encoding='utf-8') as f:
json.dump(py_obj, f, indent=4, ensure_ascii=False)
其中,py_obj是Python对象,f为文件对象,indent参数为缩进空格数,ensure_ascii参数指定是否对非ASCII字符进行编码,这里设置为False即可保留中文字符。
下面通过一个例子进行测试:
import json
# Python对象
person = {
"name": "小王",
"age": 18,
"hobby": [
"play games",
"listen to music"
]
}
# 将Python对象转换为JSON格式的数据,并存储到文件中
with open('person.json', 'w', encoding='utf-8') as f:
json.dump(person, f, indent=4, ensure_ascii=False)
执行该代码后,当前目录下会生成一个名为person.json的文件,使用文本编辑器打开即可查看。
3. 将JSON数据转换为Python对象
同样使用json模块,可以将JSON格式的数据转换为Python对象,最常用的方法是loads()和load()函数。loads()函数将JSON格式的字符串转换为Python对象,而load()函数则将JSON格式的数据从文件中读取出来,并转换为Python对象。
3.1 loads()函数
使用loads()函数可以将JSON格式的字符串转换为Python对象,其常用参数及用法如下:
import json
# 将JSON格式的字符串转换为Python对象
py_obj = json.loads(json_str)
其中,json_str是JSON格式的字符串,py_obj为转换后的Python对象。
下面通过一个例子进行测试:
import json
# JSON格式的字符串
json_str = '{"name": "小王", "age": 18, "hobby": ["play games", "listen to music"]}'
# 将JSON格式的字符串转换为Python对象
person = json.loads(json_str)
# 输出Python对象
print(person)
输出结果如下:
{'name': '小王', 'age': 18, 'hobby': ['play games', 'listen to music']}
3.2 load()函数
使用load()函数可以将JSON格式的数据从文件中读取出来,并转换为Python对象,其常用参数及用法如下:
import json
# 从文件中读取JSON格式的数据,并转换为Python对象
with open('person.json', 'r', encoding='utf-8') as f:
py_obj = json.load(f)
其中,f为文件对象,py_obj为转换后的Python对象。
下面通过一个例子进行测试:
先将之前生成的person.json文件复制到当前目录下,执行如下代码:
import json
# 从文件中读取JSON格式的数据,并转换为Python对象
with open('person.json', 'r', encoding='utf-8') as f:
person = json.load(f)
# 输出Python对象
print(person)
输出结果与之前一样:
{'name': '小王', 'age': 18, 'hobby': ['play games', 'listen to music']}
4. Python对JSON数据格式的处理示例
下面通过一个简单的示例代码,演示Python对JSON数据格式的处理过程。首先定义一个字典类型的Python对象,其中包含了一个列表型的元素。接着将该Python对象转换为JSON格式的字符串,再通过dump()函数将JSON格式的数据存储到文件中。最后,通过load()函数读取文件中的JSON数据,将其转换为Python对象,并输出。
import json
# 定义Python对象
person = {
"name": "小王",
"age": 18,
"hobby": [
"play games",
"listen to music"
]
}
# 将Python对象转换为JSON格式的字符串
json_str = json.dumps(person, indent=4, ensure_ascii=False)
# 将JSON格式的数据存储到文件中
with open('person.json', 'w', encoding='utf-8') as f:
json.dump(person, f, indent=4, ensure_ascii=False)
# 从文件中读取JSON格式的数据,并转换为Python对象
with open('person.json', 'r', encoding='utf-8') as f:
py_obj = json.load(f)
# 输出Python对象
print(py_obj)
执行该代码后,输出结果如下:
{'name': '小王', 'age': 18, 'hobby': ['play games', 'listen to music']}
总结
本文介绍了Python格式化文件存储—JSON的相关内容,包括JSON数据格式的结构、Python对JSON数据格式的处理方法及示例等。通过掌握这些内容,可以方便地将Python对象转换为JSON格式的数据,或将JSON格式的数据转换为Python对象,进行序列化、反序列化等操作。