关于 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入门篇之字符串
Oct 17 Python
python实现带错误处理功能的远程文件读取方法
Apr 29 Python
python微信好友数据分析详解
Nov 19 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
结合OpenCV与TensorFlow进行人脸识别的实现
Oct 10 Python
python关于调用函数外的变量实例
Dec 26 Python
Python面向对象封装操作案例详解
Dec 31 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
Python 如何创建一个线程池
Jul 28 Python
jupyter notebook更换皮肤主题的实现
Jan 07 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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
帅气的琦玉老师
2020/03/02 日漫
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
JQuery从头学起第三讲
2010/07/06 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
自荐信模板大全
2015/03/27 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
Python实现文字pdf转换图片pdf效果
2022/04/03 Python
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers