1、json介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming LanguageStandard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:

  1. json.dumps():对数据进行编码
  2. json.loads():对数据进行解码

json.dumps与json.loads实例

以下实例演示了 Python 数据结构转换为JSON

 #!/usr/bin/env python
 # _*_ coding:utf-8 _*_
 # Author: enzhi.wang
 import json
 # 将python的基础数据类型转化成字符串
 dic = {"k1":"v1","k2":"v2"}
 print("Python原始数据:",repr(dic),type(dic))
 result = json.dumps(dic)    #将字典类型转换为字符串类型
 print("JSON对象:",result,type(result))

执行以上代码输出结果为:

C:\Python3.5\python.exe C:/Users/root/PycharmProjects/S14/day4/json序列化.py
Python原始数据: {'k1': 'v1', 'k2': 'v2'} <class 'dict'>
JSON对象: {"k1": "v1", "k2": "v2"} <class 'str'>

通过输出的结果可以看出,简单类型通过编码后跟其原始的repr()输出结果非常相似。

接着以上实例,我们可以将一个JSON编码的字符串转换回一个Python数据结构:

 #!/usr/bin/env python
 # _*_ coding:utf-8 _*_
 # Author: enzhi.wang
 import json
 # 将python的基础数据类型转化成字符串
 dic = {"k1":"v1","k2":"v2"}
 print("Python原始数据:",repr(dic),type(dic))
 result = json.dumps(dic)    #将字典类型转换为字符串类型
 print("JSON对象:",result,type(result))

 # 将python字符串类型转化为python基本数据类型
 result = json.loads(result)
 print("result['k1']:",result['k1'])
 print("result['k2']:",result['k2'])

执行以上代码输出结果为:

C:\Python3.5\python.exe C:/Users/root/PycharmProjects/S14/day4/json序列化.py
Python原始数据: {'k1': 'v1', 'k2': 'v2'} <class 'dict'>
JSON对象: {"k1": "v1", "k2": "v2"} <class 'str'>
result['k1']: v1
result['k2']: v2

如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。例如:

 data = {
     "name":"wangenzhi",
     "age":25,
     "job":"ops"
 }
 # 写入json数据
 with open('db.json','w') as f:
     json.dump(data,f)

 # 读取json数据
 with open('db.json','r') as f:
     res = json.load(f)
     print(res,type(res))

更多资料请参考:https://docs.python.org/3/library/json.html

2、pickle介绍

pickle模块使用的数据格式是python专用的,并且不同版本不向后兼容,同时也不能被其他语言说识别。要和其他语言交互,可以使用内置的json 包使用pickle模块你可以把Python对象直接保存到文件,而不需要把他们转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件里。 pickle模块会创建一个python语言专用的二进制格式,你基本上不用考虑任何文件细节,它会帮你干净利落地完成读写独享操作,唯一需要的只是一个合法的文件句柄。

python3中可以使用pickle模块,对数据进行编解码。它包含两个函数:

  1. pickle.dumps()
  2. pickle.loads()

pickle.dumps与pickle.loads实例

 #!/usr/bin/env python
 # _*_ coding:utf-8 _*_
 # Author: enzhi.wang
 import pickle

 data = {
     "name":"wangenzhi",
     "age":25,
     "job":"ops"
 }

 print("原始python对象:",repr(data))
 r = pickle.dumps(data)
 print("pickle转换后的对象:",r)
 res = pickle.loads(r)
 print("res['name']:",res['name'])
 print("res['age']:",res['age'])
 print("res['job']:",res['job'])

执行以上代码输出结果为:

C:\Python3.5\python.exe C:/Users/root/PycharmProjects/S14/day4/pickle序列化.py
原始python对象: {'name': 'wangenzhi', 'job': 'ops', 'age': 25}
pickle转换后的对象: b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\t\x00\x00\x00wangenzhiq\x02X\x03\x00\x00\x00jobq\x03X\x03\x00\x00\x00opsq\x04X\x03\x00\x00\x00ageq\x05K\x19u.'
res['name']: wangenzhi
res['age']: 25
res['job']: ops

如果你要处理的是文件而不是字符串,你可以使用 pickle.dump() 和 pickle.load() 来编码和解码JSON数据。例如:

 import pickle

 data = {
     "name":"wangenzhi",
     "age":25,
     "job":"ops"
 }
 # 写入数据,要以wb格式写入
 pickle.dump(data,open('db','wb'))
 # 读取数据,要以rb格式读取
 f = open('db','rb')
 res = pickle.load(f)
 print(res)

执行以上代码输出结果为:

C:\Python3.5\python.exe C:/Users/root/PycharmProjects/S14/day4/pickle序列化.py
{'job': 'ops', 'name': 'wangenzhi', 'age': 25}

小结

JSON:适合跨语言,对于python而言仅适用于Python基本数据类型

pickle:仅适用于python,pickle适用于python所有数据类型的序列化

Python序列化之json与pickle的更多相关文章

  1. python序列化模块json和pickle

    序列化相关 1. json 应用场景: json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转 ...

  2. python 序列化之JSON和pickle详解

    JSON模块 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类 ...

  3. 【转】Python之数据序列化(json、pickle、shelve)

    [转]Python之数据序列化(json.pickle.shelve) 本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型 ...

  4. Python序列化,json&pickle&shelve模块

    1. 序列化说明 序列化可将非字符串的数据类型的数据进行存档,如字典.列表甚至是函数等等 反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用 2. Python中常用的序列 ...

  5. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  6. Python之数据序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  7. python 数据序列化(json、pickle、shelve)

    本来要查一下json系列化自定义对象的一个问题,然后发现这篇博客(https://www.cnblogs.com/yyds/p/6563608.html)很全面,感谢作者,关于python序列化的知识 ...

  8. python常见模块之序列化(json与pickle以及shelve)

    什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flatte ...

  9. python序列化模块 json&&pickle&&shelve

    #序列化模块 #what #什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程叫做序列化. #why #序列化的目的 ##1.以某种存储形式使自定义对象持久化 ##2.将对象从一个地方传递 ...

随机推荐

  1. Oracle数据库,非空约束、主键约束、外键约束、唯一约束

    非空约束:设置列时,可为空默认可为空,去掉对号之后设置数据不可为空: 唯一约束:在键中设置,唯一约束名称.类型Unique.列名:设置应用完成之后,此列数据具有唯一性:即数据不可重复(类型:Uniqu ...

  2. objective-c NSMutableAttributedString

    NSMutableAttributedString 是一个很强悍的富文本处理字符串,可以方便的实现一个字符串中某个字符的样式处理.我把我下面代码实现的功能步骤说一下:首先拼接两个字符串,然后给前前半部 ...

  3. 通过python将图片生成字符画

    基础知识: 1.python基础知识   快速学习链接:https://www.shiyanlou.com/courses/214 2.linux命令行操作   快速学习链接:https://www. ...

  4. PHP内核探索之变量(1)Zval

    作为数据的容器,我们常常需要跟变量打交道,不管这个变量是数字.数组.字符串.对象还是其他,因而可以说变量是构成语言的不可或缺的基础.本文是PHP内核探索之变量的第一篇,主要介绍zval的基本知识,包括 ...

  5. Fiddler (三) Composer创建和发送HTTP Request

      之前已经写过两篇Fiddler的文章了,分别是[Fiddler教程] [Fiddler script用法].  我准备把Fiddler写成一个系列. Fiddler的功能还有很多, 很多功能都没有 ...

  6. rabbitmq connection/channel/consumer/queue的数量关系详细分析

    最近,MQ经常有丢包的现象,看各connection/channel/consumer/queue的组成情况,发现差别比较大. channel与消费者: [root@iZ23nn1p4mjZ bin] ...

  7. java RSA加解密以及用途

    在公司当前版本的中间件通信框架中,为了防止非授权第三方和到期客户端的连接,我们通过AES和RSA两种方式的加解密策略进行认证.对于非对称RSA加解密,因为其性能耗费较大,一般仅用于认证连接,不会用于每 ...

  8. Linux 学习手记(6): 磁盘、分区、MBR与GPT

    1. 磁盘在LINUX中的表示 Linux所有设备都被抽象为一个文件,保存在/dev目录下 设备名称一般为hd[a-z]或者sd[a-z]([a-z]为分区号),如:hda.hdb.sda.sdb I ...

  9. Permit.js – 用于构建多状态原型的 jQuery 插件

    Permit.js 是一个 jQuery 插件,用于构建交互的,多态的网站原型和应用程序原型.也许你的网站有的功能仅适用于登录的成员,只有管理员才能使用或者你的应用程序会根据线上或离线有不同的功能,这 ...

  10. 类似 Google Tips 页面的卡片式提示和翻转特效

    这款 jQuery 插件用于实现类似 Google Tips 页面的卡片式提示和翻转的交互特效.你可以根据自己的需要定制动画效果参数,定义回调函数来控制行为.因为使用了 CSS3,所以只支持 Chro ...