python 序列化模块之 json 和 pickle

时间:2021-07-29 22:20:32

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,支持不同程序之间的数据转换.但是只能转换简单的类型如:(列表、字典、字符串、数字、)等,比如日期格式、类对象等json就处理不了。

在python中,有专门处理json格式的模块  json 和 pickle模块:

json模块用于字符串和python数据类型间进行转换;pickle模块用于python特有的类型和python的数据类型间进行转换,而且都提供了dumps、dump、loads、load 4个功能,用法也一样,不用的是json模块序列化出来的是通用格式,其它编程语言都认识,就是普通的字符串,而pickle模块序列化出来的只有python可以认识,其他编程语言不认识的,表现为乱码。

json模块使用实例:

引用模块:

import json

序列化方法, 将python对象转换成其他语言通用的字符串类型:

json.dump        将数据通过特殊的形式转为所以程序语言都认识的字符串,并写入文件.
json.dumps 将数据通过特殊的形式转换为所以程序语言都认识的字符串

实例:

#!/usr/bin/env python
#coding:utf-8 import json obj = [123,[1,2,3],'abc',{ 'key' : 'value' ,'key2' : (4,5,6)}]
p = json.dumps(obj) print("obj类型:",type(obj))
print(repr(obj))
print("json.dumps后类型:",type(p))
print(p) ---------------------------------------------
执行结果:
obj类型: <class 'list'>
[123, [1, 2, 3], 'abc', {'key': 'value', 'key2': (4, 5, 6)}]
json.dumps后类型: <class 'str'>
[123, [1, 2, 3], "abc", {"key": "value", "key2": [4, 5, 6]}] #通过输出的结果可以看出,简单类型通过encode之后跟其原始的repr()输出结果非常相似,但是有些数据类型进行了改变,例如上例中的元组则转换为了列表。在json的编码过程中,会存在从python原始类型向json类型的转化过程.

json.dump() 示例:

#!/usr/bin/env python
#coding:utf-8 import json dist = {'name' : 'saneri','age' : 18} with open('test.json','w',encoding='utf-8') as f: json.dump(dist,f,indent=4) #indent 超级好用,格式化保存字典,默认为None,小于0为零个空格,此处为4个空格
#f.write(json.dumps(dist,indent=4)) # 和上面的效果一样

保存的文件test.json效果:

python 序列化模块之 json 和 pickle

python 原始类型向 json 类型的转化对照表:

Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null

反序列化方法,把Json格式字符串解码转换成Python对象:

json.load     将一个包含JSON格式数据的可读文件反序列化为一个python对象。
json.loads 将包含str类型的JSON文档反序列化为一个python对象

实例:

#json.load示例
>>> import json
>>> dict = {"name" : "saneri","age" : 23}
>>> json.dumps(dict) #将python对象转为所以程序有认识的json字符中
'{"name": "saneri", "age": 23}'
>>>
>>> json.loads('{"name": "saneri", "age": 23}' #将json字符串转为python对象.
... )
{'name': 'saneri', 'age': 23} ################################## #从json文件中读取字符串方法。
with open("test.json", "r", encoding='utf-8') as f:
aa = json.loads(f.read()) #loads读取方法
f.seek(0)
bb = json.load(f) # load读取方法,与 json.loads(f.read())相同
print(aa)
print(bb) ----------------------------------------
执行结果: {'name': 'saneri', 'age': 18}
{'name': 'saneri', 'age': 18}

json 类型转换到 python 的类型对照表:

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

pickle模块使用实例:

pickle,用于python特有的类型 和 python的数据类型间进行转换 。

pickle.dumps    将数据通过特殊的形式转换为只有python语言认识的字符串
pickle.dump   将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
pickle.loads   将pickle数据转换为python的数据结构
pickle.load     从数据文件中读取数据,并转换为python的数据结构

实例应用:

1.dumps和loads示例:

>>> import pickle
>>> data = ['aa', 'bb', 'cc']
>>> p_str = pickle.dumps(data)   #dumps 将数据通过特殊的形式转换为只有python语言认识的字符串
>>> print(p_str)
b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.'
>>> mes = pickle.loads(p_str)   # loads 将pickle数据转换为python的数据结构
>>> print(mes)
['aa', 'bb', 'cc']
>>>

2.dump和load示例:

import pickle

data = ['aa','bb','cc']

with open('test.pki','wb') as f:
pickle.dump(data, f) # dump 将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件 with open('test.pki','rb') as f:
data = pickle.load(f) # load 从数据文件中读取数据,并转换为python的数据结构
print(data)

参考文档:

    https://www.cnblogs.com/saneri/p/5015769.html

python 序列化模块之 json 和 pickle的更多相关文章

  1. Python 序列化模块(json,pickle,shelve)

    json模块 JSON (JavaScript Object Notation):是一个轻量级的数据交换格式模块,受javascript对象文本语法启发,但不属于JavaScript的子集. 常用方法 ...

  2. python常用模块之json、pickle模块

    python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...

  3. 022&period;Python模块序列化模块(json,pickle)和math模块

    序列化模块 一  序列化模块 pickle 1.1 基本认识 序列化:把不能够直接存储的数据变成可存储的过程就是序列化 反序列化:把储存的数据拿出来恢复成原来的数据类型就是反序列化 例如,一个文件不可 ...

  4. python常用模块之json和pickle模块

    json模块 json.dumps     将 Python 对象编码成 JSON 字符串 json.loads       用于解码 JSON 数据.该函数返回 Python 字段的数据类型. pi ...

  5. Python常用模块之json、pickle、random、hashlib、collections

    1.json和pickle json用于字符串和Python数据类型间进行转换pickle用于python特有的类型和python的数据类型间进行转换json和pickle均提供了四种方法dumps, ...

  6. 11-14序列化模块之json、pickle、shelve

    序列化的目的 1.以某种存储形式使自定义对象持久化: 2.将对象从一个地方传递到另一个地方. 3.使程序更具维护性. 序列化--转向一个字符串数据类型序列--及时字符串 何处用到: 数据存储 网络上传 ...

  7. Python序列化与反序列化-json与pickle

    Python序列化与反序列化-json与pickle 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.json的序列化方式与反序列化方式 1>.json序列化 #!/usr ...

  8. Python 入门之 内置模块 -- 序列化模块(json模块、pickle模块)

    Python 入门之 内置模块 -- 序列化模块(json模块.pickle模块) 1.序列化 Python中这种序列化模块有三种: ​ json模块 : ​ 不同语言都遵循的一种数据转化格式,即不同 ...

  9. (转)python常用模块&lpar;模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块&rpar;

    阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...

随机推荐

  1. Alljoyn之管中窥豹

    Alljoyn之管中窥豹 一.历史: Alljoyn是高通2011年推出的近距离P2P通讯技术,它为分布式应用程序在不同设备中提供了运行环境,特别是移动性.安全性和动态配置,支持Microsoft W ...

  2. C&num; winform多线程的小例子

    在文本框中输入一个数字,点击开始累加按钮,程序计算从1开始累计到该数字的结果.因为该累加过程比较耗时,如果直接在UI线程中进行,那么当前窗口将出现假死.为了有更好的用户体验,程序启动一个新的线程来单独 ...

  3. HDOJ&lpar;HDU&rpar; 1877 又一版 A&plus;B&lpar;进制、、&rpar;

    Problem Description 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数. Input 输入格式:测试输 ...

  4. No&period;5 表达式中的陷阱

    1. 关于字符串的陷阱 JVM对字符串的处理 String java = new String("Java"); 创建了几个对象? 2个."Java"直接量对应 ...

  5. Oracle免费的便捷Web应用开发框架

    Oracle免费的便捷Web应用开发框架 APEX 总体来说,APEX是我见过最便捷最高效的开发框架,用起来比PHP还舒服.上手简单,学习成本极低,曾经有个做行政的小女生,在我指导下两天就可以开发出简 ...

  6. DDGScreenShot—截取图片的任意部分

    写在前面 DDGScreenShot 库提供了截取任意图片的功能, 支持手势截图,当然,输入任意的区域也可以,下面看看具体的代码 代码如下: 方法封装 /** ** 用手势截图(截取图片的任意部分) ...

  7. csc&period;exe的环境变量设置

    csc.exe使用来编译*.cs文件的,但必须要在安装目录下使用.所以需要设置一下环境变量. C#的环境变量设置 1.“win+R” 打开运行窗口,并输入 “cmd”: 2.运行“set path=% ...

  8. 细说shiro之三:在独立应用中使用shiro

    官网:https://shiro.apache.org/ 1. 下载在非Web环境的独立应用中使用Shiro时,只需要shiro-core组件.在Maven项目中的依赖配置如下: <depend ...

  9. vue实现淘宝购物车功能

    淘宝购物车功能,效果如下图 非常简单的逻辑,没有做代码的封装,代码如下 <div class="list-container"> <div class=&quot ...

  10. 界面编程之QT的数据库操作20180801

    /*******************************************************************************************/ 一.数据库连 ...

相关文章