Python基础——PyCharm版本——第八章、文件I/O(核心2——JSON序列化与反序列化——超重点)

简介: Python基础——PyCharm版本——第八章、文件I/O(核心2——JSON序列化与反序列化——超重点)

json序列化与反序列化概述

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。


JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:


对比示例:


image.png

image.png

Python内置的json模块提供了非常完善的Python对象到JSON格式的转换。我们先看看如何把Python对象变成一个JSON:

序列化示例1:dict(map)

import json
list1 = ["小龙女", "王姑娘", "赵灵儿"]
# 使用map格式编写数据类型,或者通过dict直接编写数据格式即可
# d = {"msg": "访问成功", "status": True, "result": list1}
d = dict(msg="访问成功", status=True, result=list1)
info = json.dumps(d)
print(info)
info = json.loads(info)
print(info["msg"])
print(info["status"])
print(info["result"])

image.png从以上的实验中可以看到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码来排序


相关文章
|
4月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
4月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
4月前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
493 4
|
4月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
261 1
|
4月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
269 1
|
5月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
5月前
|
XML JSON 编解码
从JSON到Protobuf,深入序列化方案的选型与原理
序列化是数据跨边界传输的“翻译官”,将结构化数据转为二进制流。JSON可读性强但冗余大,Protobuf高效紧凑、性能优越,成主流选择。不同场景需权衡标准化与定制优化,选最合适方案。
417 3
|
6月前
|
JSON 安全 API
Python处理JSON数据的最佳实践:从基础到进阶的实用指南
JSON作为数据交换通用格式,广泛应用于Web开发与API交互。本文详解Python处理JSON的10个关键实践,涵盖序列化、复杂结构处理、性能优化与安全编程,助开发者高效应对各类JSON数据挑战。
400 1
|
8月前
|
存储 Java 编译器
说一说关于序列化/反序列化中的细节问题
我是小假 期待与你的下一次相遇 ~
153 1
|
8月前
|
JSON Java 数据库连接

热门文章

最新文章

推荐镜像

更多