json序列化和反序列化
# coding:utf-8:
import json
def show(data):
js = json.dumps(data)
js_type = type(js)
original = json.loads(js)
original_type = type(original)
print('json:%s,json_type:%s,original:%s,original_type:%s' % (js, js_type, original, original_type))
if __name__ == '__main__':
"""
json.dumps(obj) 将对象obj序列化成字符串
json.loads(str) 将序列化的字符串还原成原始对象
obj:number|list|tuple|dict|bool,不能是set
json.dumps(list) 和 json.dumps(tuple) 结果一样,还原只能还原成list
json.dumps(bool) 会将第一个字母小写,还原第一个字母会再变成大写
"""
# list
show([1, 2, 3]) # json:[1, 2, 3],json_type:<class 'str'>,original:[1, 2, 3],original_type:<class 'list'>
# tuple 元组json.dumps() 转成 'list',还原也只能还原成list
show((1, 2, 3)) # json:[1, 2, 3],json_type:<class 'str'>,original:[1, 2, 3],original_type:<class 'list'>
# True 转换成 'true' 还原成 True
show(True) # json:true,json_type:<class 'str'>,original:True,original_type:<class 'bool'>
# False 转换成 'false' 还原成 False
show(False) # json:false,json_type:<class 'str'>,original:False,original_type:<class 'bool'>
# dict 转换成标准json 还原成dict
show({'name': 'xie', 'sex': 'man'}) # json:{"name": "xie", "sex": "man"},json_type:<class 'str'>,original:{'name': 'xie', 'sex': 'man'},original_type:<class 'dict'>
# str 都是一个样子
show('abc') # json:"abc",json_type:<class 'str'>,original:abc,original_type:<class 'str'>
# number 转成成 'number' 还原成number
show(123) # json:123,json_type:<class 'str'>,original:123,original_type:<class 'int'>
show(99.99) # json:99.99,json_type:<class 'str'>,original:99.99,original_type:<class 'float'>
# set 不能序列化
pickle序列化与反序列化
# coding:utf-8
import pickle
def show(data):
pick = pickle.dumps(data)
pick_type = type(pick)
original = pickle.loads(pick)
original_type = type(original)
print('pickle:%s,pickle_type:%s,original:%s,original_type:%s' % (pick, pick_type, original, original_type))
if __name__ == '__main__':
"""
pickle.dumps(obj) 将对象序列化成bytes,用法同json.dumps(obj),但其obj可以是set类型
pickle.loads(bytes) 将bytes还原成原始对象,用法同json.loads(str)
"""
show([1, 2, 3]) # pickle:b'\x80\x03]q\x00(K\x01K\x02K\x03e.',pickle_type:<class 'bytes'>,original:[1, 2, 3],original_type:<class 'list'>
# pickle.dumps(obj) obj 可以是 set
# json.dumps(obj) obj 不可以是 set
show({1, 2, 3}) # pickle:b'\x80\x03cbuiltins\nset\nq\x00]q\x01(K\x01K\x02K\x03e\x85q\x02Rq\x03.',pickle_type:<class 'bytes'>,original:{1, 2, 3},original_type:<class 'set'>