Python中JSON模块的使用:序列化与反序列化详解
本文详细介绍Python内置json模块的使用方法,涵盖将JSON字符串转换为Python对象(反序列化)以及将Python对象转换为JSON字符串(序列化)的核心操作。重点解析json.loads、json.load、json.dumps和json.dump四个关键函数的参数配置,包括ensure_ascii、indent和sort_keys的具体作用,帮助开发者高效处理数据交换格式。
将JSON格式的数据转换为Python内部数据结构的过程被称为反序列化。
相反地,将Python对象转换为JSON字符串格式的过程称为序列化。
json是Python标准库中的内置模块,无需额外安装即可直接使用。
json模块支持的数据类型映射如下:
| Json | Python |
| 对象(object) | 字典(dict) |
| 数组(array) | 列表(list) |
| 字符串(string) | 字符串(str) |
| 整数(int) | 整数(int) |
| 实数(float) | 实数(float) |
| true | True |
| false | False |
| null | None |
具体代码实现示例如下:
1. 将JSON数据转换为Python对象
json模块提供了两个主要函数,用于将JSON字符串反序列化为Python对象。
json.loads(s) 其中参数s代表输入的JSON字符串。
import json
str_json = '{"name":"张三","age":24}'
res = json.loads(str_json)
print(res, type(res)) #{'name': '张三', 'age': 24} <class 'dict'>
json.load(fb) 其中fb代表一个已打开的文件对象,例如test.json文件。
test.json
{
"name":"张三",
"age":24,
"friends": [{
"name": "李四",
"age": 23
},
{
"name": "王麻子",
"age": 24
}],
"hobby": ["玩游戏","看电影"]
}
import json
with open('test.json', 'r', encoding='utf-8') as f:
res = json.load(f)
print(res, type(res))
# {'name': '张三', 'age': 24, 'friends': [{'name': '李四', 'age': 23}, {'name': '王麻子', 'age': 24}], 'hobby': ['玩游戏', '看电影']} <class 'dict'>
JSON字符串在实际应用中通常不会单独存在。
json.loads('"test"') #'test'
它们通常被包含在字典或列表等Python数据结构中。
json.loads('["test1","test2","test3"]') #['test1','test2','test3']
2. 将Python对象序列化为JSON字符串
json.dumps(obj,ensure_ascii=True,indent=None,sort_keys=False)
obj:代表需要转换的Python对象。ensure_ascii:默认值为True,确保输出中包含的所有非ASCII字符都被转义。如果将此参数设为False,这些字符将按原样输出。indent:接受非负整数或字符串。若指定为JSON数组元素和对象成员的缩进等级,则按该值进行美化输出。若值为零、负数或空字符串,仅添加换行符。默认值None选择最紧凑的表达方式。指定正整数可使每一层缩进相同数量的空格。若指定为字符串(如"\t"),则该字符串用于每层的缩进。sort_keys:设为True(默认False)时,字典输出将按键的顺序进行排序。
import json
data = {
"name":"张三",
"age":24,
"friends": [{
"name": "李四",
"age": 23
},
{
"name": "王麻子",
"age": 24
}],
"hobby": ["玩游戏","看电影"]
}
res = json.dumps(data,ensure_ascii=False,indent=2, )
print(res, type(res))
打印输出的结果如下:
{ "name": "张三", "age": 24, "friends": [ { "name": "李四", "age": 23 }, { "name": "王麻子", "age": 24 } ], "hobby": [ "玩游戏", "看电影" ] } <class 'str'>
json.dump(obj,fb,ensure_ascii=True,indent=None,sort_keys=False)
obj:代表需要序列化的Python对象。fb:代表以文本写入模式打开的文件对象。
import json
data = {
"name":"张三",
"age":24,
"friends": [{
"name": "李四",
"age": 23
},
{
"name": "王麻子",
"age": 24
}],
"hobby": ["玩游戏","看电影"]
}
with open('test1.json', 'w', encoding='utf-8') as f:
json.dump(data, fp=f, ensure_ascii=False, indent=2)
写入文件后的结果如下:
test1.json
{
"name": "张三",
"age": 24,
"friends": [
{
"name": "李四",
"age": 23
},
{
"name": "王麻子",
"age": 24
}
],
"hobby": [
"玩游戏",
"看电影"
]
}
总结
以上就是本文的全部内容,希望能对大家有所帮助,也欢迎大家关注本站获取更多技术内容!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













