关于 Python json中load和loads区别


Posted in Python onNovember 07, 2021

一、相同点

  • dump dumps 都实现了序列化
  • load loads 都实现反序列化

变量从内存中变成可存储或传输的过程称之为序列化序列化是将对象状态转化为可保存或可传输格式的过程。

变量内容从序列化的对象重新读到内存里称之为反序列化反序列化是流转换为对象。

二、区别

1.load 和 loads (反序列化)

load:针对文件句柄,将json格式的字符转换为dict,从文件中读取 (将string转换为dict)

a_json = json.load(open('demo.json','r'))

loads:针对内存对象,将string转换为dict (将string转换为dict)

a = json.loads('{'a':'1111','b':'2222'}')

2.dump 和 dumps(序列化)

dump:将dict类型转换为json字符串格式,写入到文件 (易存储)

a_dict = {'a':'1111','b':'2222'}
json.dump(a_dict, open('demo.json', 'w')

dumps:将dict转换为string (易传输)

a_dict = {'a':'1111','b':'2222'}
a_str = json.dumps(a_dict)

总结:

根据序列化和反序列的特性

  • loads: 是将string转换为dict
  • dumps: 是将dict转换为string
  • load: 是将里json格式字符串转化为dict,读取文件
  • dump: 是将dict类型转换为json格式字符串,存入文件

三、JSON进阶

1.序列化

# 使用class对象的__dict__方法
class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score
import json
s = Student('Bob', 20, 88)
print(json.dumps(s, default=lambda obj: obj.__dict__))

2.反序列化

#Python学习交流群:531509025

def dict2student(d):
    return Student(d['name'], d['age'], d['score'])

json_str = '{"age": 20, "score": 88, "name": "Bob"}'
print(json.loads(json_str, object_hook=dict2student))

四、python中的序列化和反序列化

Python提供两个模块来实现序列化:cPicklepickle。这两个模块功能是一样的,区别在于cPickle是C语言写的,速度快,pickle是纯Python写的,速度慢。

  • 变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling
  • 变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling
try:
    import cPickle as pickle
except ImportError:
    import pickle

1.将内存对象存取到磁盘

a = dict(a=1, b=2, c=3)
pickle.dumps(a)     # 将对象序列化为str然后存入文件

a = dict(a=1, b=2, c=3)
pickle.dump(a, open('a.txt', 'wb')) # 使用dump直接把对象序列化为file-like Object,注意是二进制存储

2.从磁盘读取到内存对象

pickle.load(open('a.txt', 'rb'))    #从file-like Object中直接反序列化出对象

到此这篇关于关于 Python json中load和loads区别的文章就介绍到这了,更多相关 Python json中load和loads区别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
星球大战与Python之间的那些事
Jan 07 Python
python实现SOM算法
Feb 23 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
Aug 12 Python
python实现猜数字游戏
Mar 25 Python
Python time库基本使用方法分析
Dec 13 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
Python环境配置实现pip加速过程解析
Nov 27 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 #Python
Python人工智能之混合高斯模型运动目标检测详解分析
7个关于Python的经典基础案例
Nov 07 #Python
python机器学习创建基于规则聊天机器人过程示例详解
Python中Numpy和Matplotlib的基本使用指南
python模块与C和C++动态库相互调用实现过程示例
Nov 02 #Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 #Python
You might like
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
js创建数组的简单方法
2016/07/27 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
python实现动态创建类的方法分析
2019/06/25 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
荣耀商城:HIHONOR
2020/11/03 全球购物
Android面试宝典
2013/08/06 面试题
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
营销与策划个人求职信
2013/09/22 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
工人先进事迹材料
2014/12/26 职场文书
单位同意报考证明
2015/06/17 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python