一、json模块详解
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格式。
三、数据类型编解码
json.dumps #将python对象编码成JSON字符串
json.loads #将已编码的JSON字符串解码成Python对象
json.dump #将对象序列化并保存到文件
json.load #将序列化字符串从文件读取并反序列化
四、序列化及反序列化常用参数
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
encoding="utf-8", default=None, sort_keys=False, **kw)
ensure_ascii=False: 中文存储需要设定
indent=4: 增加缩进,增强可读性,但缩进空格会使数据变大
separators=(',',':'): 自定义分隔符,元素间分隔符为逗号, 字典key和value值的分隔符为冒号
sort_keys=True: 字典排序
五、自定义复杂数据类型编解码
例如我们碰到集合对象, datetime对象,或者自定义的类对象等json默认不支持的数据类型时,我们就需要自定义编解码函数。有两种方法来实现自定义编解码。
六、Pickle模块详解
python的pickle模块实现了python的所有数据序列和反序列化。与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。
cPickle是pickle模块的C语言编译版本相对速度更快。
七、JSON和pickle模块的区别
1、JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
2、JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。
"""
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。
这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
"""
import json
# 1). 创建python对象
users = {}
for item in range(100):
users['user%s' %(item)] = '密码'
# 2). 将python对象编码为json对象
# """
# indent=4 -----缩进为4
# ensure_ascii=False---如果显示中文需要设置
# separators=None -- 修改默认分隔符
# ``separators`` should be an ``(item_separator, key_separator)``
# tuple. The default is ``(', ', ': ')``
#
# sort_keys ----- 对字典的key值进行排序
# """
# import json
# 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('doc/users.json', 'w') as f:
# json.dump(users, f, indent=4, ensure_ascii=False)
# 4). loads
# with open('doc/users.json') as f:
# content = f.read()
# user_obj = json.loads(content)
# print(user_obj)
# print(type(user_obj))
# 5). load
with open('doc/users.json') as f:
user_obj = json.load(f)
print(user_obj)
print(type(user_obj))