json与pickle

栏目: 后端 · 前端 · 发布时间: 7年前

内容简介:json与pickle

json

json是进行程序数据类型的序列化与反序列化的模块之一。利用它可以进行不同平台,不同程序下的数据交换或者是程序暂时保存数据的一种方法。下面看一看json的用法:

 1 #json_序列化.py
 2 import json
 3 dic={
 4     "id":"123456",
 5     "name":"Jack",
 6     "country":"China"
 7     }
 8 date=json.dumps(dic)
 9 with open("demo.txt","w") as f:
10     f.write(date)
11 
12 #json_反序列化.py
13 import json
14 with open("demo.txt","r") as f:
15     dic1=json.loads(f.read())
16 print(dic1["name"])

上面展示了两个文件的内容,第一个文件是将一个字典序列化成字符串(使用dumps()方法),然后写入一个文件(demo.txt)。第二个文件是将demo.txt中的内容读取出来,然后用loads()方法将其反序列化可以执行的那个字典对象,并且打印出字典的“name”的内容。

其实除了dumps()和loads()两个方法之外,json还有两个更简单的方法:dump()和load()。下面演示用法:

 1 #json_序列化2.py
 2 import json
 3 dic={
 4     "id":"123456",
 5     "name":"Jack",
 6     "country":"China"
 7     }
 8 with open("demo.txt","w") as f:
 9     date=json.dump(dic,f)
10 
11     
12 
13 #json_反序列化2.py
14 import json
15 with open("demo.txt","r") as f:
16     dic1=json.load(f)
17 print(dic1["name"])

对比一下就知道,dump()和load()是将dumps()和loads()以及文件的读写操作进行的封装。

pickle

pickle同样拥有json的上述四种方法,并且用法一模一样,在这里我就不做演示。但是pickle的功能更加强大。json只能够序列化一些比较简单的数据对象,如列表,字典等等。而pickle则还可以序列化函数,类等复杂对象。

下面演示一下pickle怎样序列化和反序列化一个函数。

 1 #pickle_序列化.py
 2 import pickle
 3 #定义函数hello
 4 def hello(name):
 5     print("hello",name)
 6 #定义列表,把hello也存进去
 7 dic1={
 8     "name":"Mark",
 9     "func":hello
10     }
11 with open("demo.txt","wb") as f:
12     pickle.dump(dic1,f)
13 
14 #pickle_反序列化.py
15 import pickle
16 #######################
17 def hello(name):
18     print("hello",name)
19 #######################
20 with open("demo.txt","rb")as f:
21     dic2=pickle.load(f)
22 dic2["func"]("Jack")

上面同样展示了两个文件的内容注意。要注意以下的问题:

1.当涉及到函数,类等的序列化和反序列化的时候,在打开文件的时候都要以二进制的形式打开,注意展示中的“wb”,“rb”

2.如果要使反序列化出来的函数可以再新文件里执行的话,必须要把前面定义好的函数的源代码复制到新文件里(注意pickle_反序列化.py中的两排#行内的内容),否则将无法运行,如果没有#号内的内容的话,程序会报错:AttributeError: Can't get attribute 'hello' on <module '__main__' from 'D:/Users/LENOVO/PycharmProjects/Myfirstflask/about_json反.py'>

3.可以对复制过来的函数的源代码进行更改,只需要保证函数名与序列化时所用的函数名一致即可,更改后如果调用该函数,则按照更改后的函数执行(当然这种更改必须是有必要的)

作者:彭前超

时间:2017/6/13 19:45


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

跨境电商——阿里巴巴速卖通宝典

跨境电商——阿里巴巴速卖通宝典

速卖通大学 编著 / 电子工业出版社 / 2015-1 / 69.00元

跨境电商作为中国电子商务发展的最新趋势,受到了全社会越来越多的重视,大量中国卖家借助阿里巴巴速卖通平台,将产品直接售卖到全球的消费者手中,通过这条短得不能再短的交易链,获得了丰厚的回报。 但同时,跨境电商这一贸易形式,对卖家的综合素质要求比较高:卖家要对海外市场比较熟悉,对跨境物流有所把握,能够用外语进行产品介绍和客户交流,通过跨境结算拿到货款……诸如此类的门槛,让不少新卖家心生畏难,而所有......一起来看看 《跨境电商——阿里巴巴速卖通宝典》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换