关于 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 18 Python
python中OrderedDict的使用方法详解
May 05 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
Python迭代器定义与简单用法分析
Apr 30 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
python实现对服务器脚本敏感信息的加密解密功能
Aug 13 Python
Python socket模块方法实现详解
Nov 05 Python
tensorflow生成多个tfrecord文件实例
Feb 17 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 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
优化php效率,提高php性能的一些方法
2011/03/24 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
php实现登录页面的简单实例
2019/09/29 PHP
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
Flask框架信号用法实例分析
2018/07/24 Python
Python多线程原理与用法详解
2018/08/20 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
python 实现dict转json并保存文件
2019/12/05 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
恶意软件的定义
2014/11/12 面试题
《荷花》教学反思
2014/04/16 职场文书
高中生班主任评语
2014/04/25 职场文书
信息技术课后反思
2014/04/27 职场文书
学校中秋节活动总结
2015/03/23 职场文书
Python+Appium新手教程
2021/04/17 Python
Python基础详解之描述符
2021/04/28 Python
简单介绍Python的第三方库yaml
2021/06/18 Python
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
java项目构建Gradle的使用教程
2022/03/24 Java/Android
Python之matplotlib绘制饼图
2022/04/13 Python
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL