当前位置: 首页 > news >正文

Python基础教程: json序列化详细用法介绍

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

Python内置的json模块提供了非常完善的对象到JSON格式的转换。

废话不多说,我们先看看如何把Python对象变成一个JSON:

d = dict(name='Kaven', age=17, sex='Male')
print(json.dumps(d))  # {"name": "Kaven", "age": 17, "sex": "Male"}

说明:

dumps()方法返回一个str,内容就是标准的JSON。

类似的,dump()方法可以直接把JSON写入一个 Object。

要把JSON反序列化为Python对象,我们可以用loads()或者对应的load()方法,前者把JSON的字符串反序列化,后者从Object中读取字符串并反序列化:

比如这样:

import json
json_str = '{"name": "Kaven", "age": 17, "sex": "Male"}'
print(json.loads(json_str)) # {'name': 'Kaven', 'age': 17, 'sex': 'Male'}

👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

资料、视频教程、代码、插件安装教程等我都准备好了,直接在文末名片自取就可


Python的dict对象可以直接序列化为JSON的{},那么如何用class对象,比如定义Person类,然后序列化?

dumps 可选参数default就是把任意一个对象变成一个可序列为JSON的对象,我们只需要为Person专门写一个转换函数,再把函数传进去即可:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import jsonclass Person(object):# __slots__ = ('name', 'age') # 通常class的实例都有一个__dict__属性,它就是一个dict,# 用来存储实例变量。也有少数例外,比如定义了__slots__的class,大家可以开启后运行看看报错信息def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexdef PersonToDict(cls):return {'name': cls.name,'age': cls.age,'sex': cls.sex}s = Person('Kaven', 17, 'Male')
print(json.dumps(s, default=PersonToDict))
# print(json.dumps(s, default=lambda obj: obj.__dict__)) 输出和上面一样
# 输出 : {"name": "Kaven", "age": 17, "sex": "Male"}

这样,Person实例首先被PersonToDict()函数转换成dict,然后再被序列化为JSON,大家看到下面有个lambda匿名函数,他的用处可大了,比如:

下次如果遇到一个Apple/Banaba等类的实例,可以把任意class的实例变为dict:

print(json.dumps(s, default=lambda obj: obj.__dict__)) # obj为对象参数名,可自定义

同样的道理,如果我们要把JSON反序列化为一个Person对象实例,loads()方法首先转换出一个dict对象,然后,我们再传入的object_hook函数负责把dict转换为Person实例:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import jsonclass Person(object):# __slots__ = ('name', 'age') # 通常class的实例都有一个__dict__属性,它就是一个dict,# 用来存储实例变量。也有少数例外,比如定义了__slots__的class,大家可以开启后运行看看报错信息def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexdef DictToPerson(d):return Person(d['name'], d['age'], d['sex'])json_str = '{"name": "Kaven", "age": 20, "sex": "Male"}'
cls = json.loads(json_str, object_hook=DictToPerson)
print(cls.name) # Kaven

Python还有个pickle模块,可能存在Python兼容问题,只能用Pickle保存那些不重要的数据。

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

http://www.lryc.cn/news/125055.html

相关文章:

  • 一张图看懂 USDT三种类型地址 Omni、ERC20、TRC20的区别
  • SegFormer之模型训练
  • Azure资源命名和标记决策指南
  • 【在一个升序数组中插入一个数仍升序输出】
  • 图像去雨、去雪、去雾论文学习记录
  • YARN框架和其工作原理流程介绍
  • 多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测
  • centos上下载redis
  • 黑马项目一阶段面试58题 Web14题(二)
  • 软考高项-思维导图34-36(计算机高级系统项目管理师)
  • C++的stack和queue+优先队列
  • Ubuntu 18.04.6 Android Studio Giraffe adb logcat 无法使用
  • Python采集天气数据,做可视化分析【附源码】
  • 优维低代码实践:自定义模板
  • 电商3D产品渲染简明教程
  • 探索未来:元宇宙与Web3的无限可能
  • GraphQL(六)登录态校验Directive
  • 强大的AI语言模型
  • 成集云 | 鼎捷ERP采购单同步钉钉 | 解决方案
  • 【Kubernetes】Kubernetes的PV和PVC的用法
  • 【Redis】Redis三种集群模式-主从、哨兵、集群各自架构的优点和缺点对比
  • Python爬虫:如何使用Python爬取网站数据
  • 剑指offer专题2:队列和栈
  • pytorch入门-神经网络
  • kafka使用心得(二)
  • (二)掌握最基本的Linux服务器用法——Linux下简单的C/C++ 程序、项目编译
  • 应急响应-钓鱼邮件的处理思路溯源及其反制
  • Hadoop Hbase Hive 版本对照一览
  • Postgresql 基础使用语法
  • Qt 之 QDebug,QString