Python Json序列化与反序列化

在python中,
序列化可以理解为将python对象编码转化为json格式的字符串
反序列化可以理解为把json格式的字符串解码为python对象

python的dumps方法和loads方法,可实现数据的序列化和反序列化。具体来说,dumps方法,可将json格式数据序列为Python的相关的数据类型loads方法则是相反,把python数据类型转换为json相应的数据类型格式要求
在序列化时,中文汉字总是被转换为unicode码,在dumps函数中添加参数ensure_ascii=False即可解决。

下面是json的序列化和反序列化:
1、Json序列化如下:

In [1]: import json

# 查看json库中的所有方法
In [2]: print(json.__all__)
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder']

未在dumps函数中添加参数ensure_ascii=False,结果如下:

# coding:utf-8
import json
dict = {
    'name':'ryang',
    'age':24,
    'address':'员村'
}

print('未序列化之前的数据类型为:',type(dict))
print('未序列化之前的数据:',dict)
# 对dict进行序列化处理
dict_str = json.dumps(dict) # 直接进行序列化
print('未序列化后的数据类型为:',type(dict_str))
print('未序列化后的数据:',dict_str)

运行结果是:

未序列化之前的数据类型为: <class 'dict'>
未序列化之前的数据: {'address': '员村', 'name': 'ryang', 'age': 24}
未序列化后的数据类型为: <class 'str'>
未序列化后的数据: {"address": "\u5458\u6751", "name": "ryang", "age": 24}

在dumps函数中添加参数ensure_ascii = False,结果如下:

# coding:utf-8
import json
dict = {
    'name':'ryang',
    'age':24,
    'address':'员村'
}

print('未序列化之前的数据类型为:',type(dict))
print('未序列化之前的数据:',dict)
# 对dict进行序列化处理
#添加ensure_ascii=False进行序列化
dict_str = json.dumps(dict,ensure_ascii=False)
print('未序列化后的数据类型为:',type(dict_str))
print('未序列化后的数据:',dict_str)

运行结果是:

未序列化之前的数据类型为: <class 'dict'>
未序列化之前的数据: {'address': '员村', 'name': 'ryang', 'age': 24}
未序列化后的数据类型为: <class 'str'>
未序列化后的数据: {"address": "员村", "name": "ryang", "age": 24}

2、json反序列化如下

# coding:utf-8
import json
dict = {
    'name':'ryang',
    'age':24,
    'address':'员村'
}

print('未序列化之前的数据类型为:',type(dict))
print('未序列化之前的数据:',dict)
# 对dict进行序列化处理
#添加ensure_ascii=False进行序列化
dict_str = json.dumps(dict,ensure_ascii=False)
print('未序列化后的数据类型为:',type(dict_str))
print('未序列化后的数据:',dict_str)

# 在对dict_str进行反序列化处理
dict_str_dict = json.loads(dict_str)
print('反序列化后的数据类型为:', type(dict_str_dict))
print('反序列化后的数据为: ', dict_str_dict)

运行结果:

未序列化之前的数据类型为: <class 'dict'>
未序列化之前的数据: {'name': 'ryang', 'address': '员村', 'age': 24}
未序列化后的数据类型为: <class 'str'>
未序列化后的数据: {"name": "ryang", "address": "员村", "age": 24}
反序列化后的数据类型为: <class 'dict'>
反序列化后的数据为:  {'name': 'ryang', 'address': '员村', 'age': 24}

在实际的工作中,序列化或者反序列化的可能是一个文件的形式,不可能像如上写的那样简单的,下来就来实现这部分,把文件内容进行序列化和反序列化,先来看序列化的代码,两步操作:
1、先序列化 列表对象 ;
2、步把序列化成的字符串写入文件:

# coding:utf-8
import json
list = ['Apple','Huawei','selenium','java','python']
# 把list先序列化,写入到一个文件中
# 两步操作 1步先序列化 列表对象
#         2步把序列化成的字符串写入文件
json.dump(list,open('hello.txt','w'))
r1 = open('hello.txt','r')
print(r1.read())

反序列化:1、先读取文件的字符串对象;2、然后反序列化成列表对象:

# coding:utf-8
import json
list = ['Apple','Huawei','selenium','java','python']
# 把list先序列化,写入到一个文件中
# 两步操作 1步先序列化 列表对象
#         2步把序列化成的字符串写入文件
json.dump(list,open('hello.txt','w'))
r1 = open('hello.txt','r')
print(r1.read())
print(type(r1.read()))
#两步操作:1、先读取文件的字符串对象;
#        2、然后反序列化成列表对象
res = json.load(open('hello.txt','r'))
print(res)
print('数据类型:',type(res))

转载原文链接:

https://www.cnblogs.com/diaosicai/p/6419833.html
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值