1. json模块介绍
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性、可编写性和可扩展性。而在Python 3.x中,可以使用json模块将Python对象转换成JSON字符串。
JSON基础语法
JSON基础语法简单明了,通过花括号({}
)表示对象,在对象中通过冒号(:
)连接属性和值。属性和值之间使用逗号(,
)分隔开,同时在最外层还有方括号([]
),用于表示多个对象。
JSON对象示例
{
"name": "John",
"age": 30,
"city": "New York"
}
JSON数组示例
[
{
"name": "John",
"age": 30,
"city": "New York"
},
{
"name": "Jane",
"age": 25,
"city": "Los Angeles"
}
]
2. 将Python对象转换成JSON字符串
在Python中,可以使用json模块(JSON库)将Python对象转换成JSON格式的字符串,其中有两个重要的方法:dumps()和dump(),分别用于将Python对象转换成JSON字符串并写入到文件中。
json.dumps()方法
json.dumps()方法用于将Python对象转换成JSON字符串,返回一个字符串类型。其中,第一个参数是要转换的Python对象,第二个参数是缩进参数。要注意的一点是,json.dumps()方法只能处理基本数据类型,如果Python对象包含自定义的复杂数据类型(比如类),则不能转换。
import json
person = {
"name": "John",
"age": 30,
"city": "New York"
}
# 将Python对象转换成JSON字符串
json_str = json.dumps(person)
print(json_str)
运行以上代码后,输出结果如下:
{"name": "John", "age": 30, "city": "New York"}
注意:在 convert Python object to JSON string 时,Python 内置的 None 转换为了 null。
json.dump()方法
json.dump()方法也用于将Python对象转换成JSON格式,并将转换后的结果写入到文件中,此方法需要两个参数,一个Python对象和文件句柄,比如:
import json
person = {
"name": "John",
"age": 30,
"city": "New York"
}
# 将Python对象转换成JSON字符串并写入文件
with open('person.json', 'w') as json_file:
json.dump(person, json_file)
运行以上代码后,在同级目录下就会生成一个名为person.json的文件,文件内容就是该Python对象转义后的JSON格式数据。
3. 将JSON字符串转换成Python对象
与将Python对象转换成JSON字符串类似,反之也可以将JSON格式的字符串转换成Python对象,同样使用json模块的loads()和load()方法。
json.loads()方法
json.loads()方法用于将JSON字符串转换成Python对象(通常是字典或列表),它有一个必需的参数是JSON字符串,返回一个Python对象。
import json
# 定义JSON字符串
json_str = '{"name": "John", "age": 30, "city": "New York"}'
# 将JSON字符串转换成Python对象
person = json.loads(json_str)
print(person)
运行以上代码后,输出结果如下:
{'name': 'John', 'age': 30, 'city': 'New York'}
json.load()方法
json.load()方法用于从文件读取JSON对象,并将其转换成Python对象,与json.dump()方法配合使用。
import json
# 从person.json文件中读取JSON字符串并转换成Python对象
with open('person.json', 'r') as json_file:
person = json.load(json_file)
print(person)
运行以上代码后,输出结果与之前输出的Python对象相同。
4. 总结
通过json模块可以很方便地将Python对象转换成JSON格式数据,同时也可以将JSON格式数据转换成Python对象。在进行对象序列化和反序列化时需要注意一些细节,比如在Python对象中不能出现自定义的复杂数据类型(比如类),因为json模块只能处理Python支持的基本数据类型,还要注意文件的读写操作等措施。