🤵🤗Python_Base:Chapter eighth🤗🤵
目录
json序列化与反序列化概述
序列化示例1:dict(map)
序列化示例2:restful
json序列化与反序列化概述
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
对比示例:
JSON类型 |
Python类型 |
{} |
dict |
[] |
list |
"string" |
str |
1234.56 |
int或float |
true/false |
True/False |
null |
None |
Python内置的json
模块提供了非常完善的Python对象到JSON格式的转换。我们先看看如何把Python对象变成一个JSON:
序列化示例1:dict(map)
从以上的实验中可以看到json序列化与反序列化的过程。
序列化示例2:restful
import json
import uuid
import time
import hashlib
class Girl:
"""用作测试json对象序列化对象"""
def __init__(self, id, createDate, userName, passWord, nickName, age, introduce):
self.id = id
self.createDate = createDate
self.userName = userName
self.passWord = passWord
self.nickName = nickName
self.age = age
self.introduce = introduce
def Girl_json(obj):
"""用于序列化"""
return {
"id": obj.id,
"createDate": obj.createDate,
"userName": obj.userName,
"passWord": obj.passWord,
"nickName": obj.nickName,
"age": obj.age,
"introduce": obj.introduce
}
def GetNow(localTime):
"""获取当前时间"""
return time.strftime("%y-%m-%d %H:%M:%S", localTime)
def Md5(obj):
"""字符串加密"""
return hashlib.md5(obj.encode(encoding='utf-8')).hexdigest()
g1 = Girl(str(uuid.uuid1()), GetNow(time.localtime()), "wangyuyan", Md5("123456"), "王姑娘", 16, "琅嬛福地,神仙姐姐。")
g2 = Girl(str(uuid.uuid1()), GetNow(time.localtime()), "gugu", Md5("123456"), "小龙女", 16, "活死人墓,冰山美人。")
g3 = Girl(str(uuid.uuid1()), GetNow(time.localtime()), "linger", Md5("123456"), "赵灵儿", 16, "仙灵岛,人间烟火。")
# 序列化:
lists = [json.dumps(g1, default=Girl_json), json.dumps(g2, default=Girl_json), json.dumps(g3, default=Girl_json)]
result = dict(status="success", msg="访问成功", result=lists)
info = json.dumps(result)
print("序列化:")
print(info)
print("\n-------------------------------------\n")
print("第一层反序列化")
load = json.loads(info)
print(load["status"])
print(load["msg"])
print(load["result"])
print("\n-------------------------------------\n")
print("第二层反序列化")
def handle(obj):
"""反序列化"""
return Girl(
obj["id"],
obj["createDate"],
obj["userName"],
obj["passWord"],
obj["nickName"],
obj["age"],
obj["introduce"])
for g in load["result"]:
girl = json.loads(g, object_hook=handle)
print(girl.id)
print(girl.createDate)
print(girl.userName)
print(girl.passWord)
print(girl.nickName)
print(girl.age)
print(girl.introduce)
备注:
json.dumps()函数的详细说明
help(json.dumps):
Help on function dumps in module 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)
# 函数作用: 将Python的对象转变成JSON对象
# skipkeys: 如果为True的话,则只能是字典对象,否则会TypeError错误, 默认False
# ensure_ascii: 确定是否为ASCII编码
# check_circular: 循环类型检查,如果为True的话
# allow_nan: 确定是否为允许的值
# indent: 会以美观的方式来打印,呈现
# separators: 对象分隔符,默认为,
# encoding: 编码方式,默认为utf-8
# sort_keys: 如果是字典对象,选择True的话,会按照键的ASCII码来排序
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)