Python之json和pickle模块详解

JSON(JavaScript Object Notation)

是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。 这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

python类型数据和JSON数据格式互相转换规则

         

注意:python 中str类型到JSON中转为unicode类型,None转为null,dict对应object

注意:pyhton中的集合不能转成json格式

数据类型编解码

dump: 将对象序列化并保存到文件

load:   将序列化字符串从文件读取并反序列化 

序列化及反序列化常用参数

 ensure_ascii=False: 中文存储需要设定  

indent=4: 增加缩进,增强可读性,但缩进空格会使数据变大  

separators=(',',':'): 自定义分隔符,元素间分隔符为逗号, 字典key和value值的分隔符为冒号  

sort_keys=True: 字典排序 

# 代码
import  json
# 1). 创建python对象
users = {}
for item in range(10):
    users['user%s' %(item)] = '密码'


# 2). 将python对象编码为json对象
# """
# indent=4 --缩进为4
# ensure_ascii=False --如果显示中文需要设置
# separators=None  -- 修改默认分隔符The default is ``(', ', ': ')``
# sort_keys  -- 对字典的key值进行排序
# """
json_users = json.dumps(users, indent=4, ensure_ascii=False, separators=('*', '-'), sort_keys=True)
print(json_users)
print(type(json_users))

# # 3). 将python对象编码为json格式的字符串, 并保存到指定文件中;
with open('/home/kiosk/PycharmProjects/2019PythonProject/week05/day01/users.json', 'w') as f:
    json.dump(users, f, indent=4, ensure_ascii=False)

# 4).  loads
with open('/home/kiosk/PycharmProjects/2019PythonProject/week05/day01/users.json') as f:
    content = f.read()
user_obj = json.loads(content)
print(user_obj)
print(type(user_obj))



# 5). load
with open('/home/kiosk/PycharmProjects/2019PythonProject/week05/day01/users.json') as f:
    user_obj = json.load(f)
print(user_obj)
print(type(user_obj))

注意:

json.dumps()是将字典类型转化成字符串类型

json.loads()将字符串类型转化成字典类型

json.dump()用于将dict类型的数据转成str,并写入到json文件中

json.load()用于从json文件中读取数据

python的pickle模块

实现了python的所有数据序列和反序列化。与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。 cPickle是pickle模块的C语言编译版本相对速度更快

JSON和pickle模块的区别

1)JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。

2).JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。

# 代码
"""
json :
    序列化(编码): python对象编码成json字符串
    反序列化(解码): 将json字符串转成python对象
pickle:
    序列化(编码): python对象编码成pickle的bytes类型数据
    反序列化(解码): 将pickle的bytes类型数据转成python对象

"""
import  json
import  pickle

nums = range(1, 10)
print(type(nums))
# json不能成功的序列化
# json_nums = json.dumps(nums)
# print(json_nums)
pickle_nums = pickle.dumps(nums)
print(pickle_nums)
print("序列化:", type(pickle_nums))

unpickle_nums = pickle.loads(pickle_nums)
print(unpickle_nums)
print("反序列化:", type(unpickle_nums))

# 运行结果
<class 'range'>
b'\x80\x03cbuiltins\nrange\nq\x00K\x01K\nK\x01\x87q\x01Rq\x02.'
序列化: <class 'bytes'>
range(1, 10)
反序列化: <class 'range'>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值