json模块

不同语言间的数据交互

eval方法可以将一个字符串转成python对象,但eval方法是有局限性,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型(函数、类等)的时候,eval就不管用了,因此eval通常用来执行一个字符串表达式,并返回表达式的值。

dic='{"name":"alex"}'
f=open('hello','w')
f.write(dic)

#eval方法将字符串转换为python的数据类型
f_read=open('hello','r')
data=f_read.read()
print(data)
print(eval(data)['name'])

 

 

json.dumps()将对象转换为json类型的字符串

json.loads()将json类型的字符串解析成解释器对应的数据类型

import json


dic={"name":"alex"}

# #将对象(无论什么类型)转化为json字符串,将字符串的引号变为双引号
# data=json.dumps(dic)
# print(data)
# print(type(data))
#
# f=open('new_hello','w')
# f.write(data)

f_read=open('new_hello','r')
read_data=json.loads(f_read.read())
print(read_data)
print(type(read_data))

json.dump(data,f)相当于json.dumps(data)+f.write(data)

json.load(f_read)相当于json.loads()+f_read.read()

 

json.dumps()与json.loads()无需成对使用,只要符合json字符串的格式即可以用json.loads()方法

 

 

pickle模块

将对象转换为字节形式,与json模块的方法完全类似,只不过读写文件的形式为二进制'wb','rb'形式读写

#序列化
import pickle
 
dic={'name':'alvin','age':23,'sex':'male'}
 
print(type(dic))#<class 'dict'>
 
j=pickle.dumps(dic)
print(type(j))#<class 'bytes'>
 
 
f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes'
f.write(j)  #-------------------等价于pickle.dump(dic,f)
 
f.close()
#-------------------------反序列化
import pickle
f=open('序列化对象_pickle','rb')
 
data=pickle.loads(f.read())#  等价于data=pickle.load(f)
 
 
print(data['age'])

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

posted on 2019-05-18 12:30  Manuel  阅读(114)  评论(0编辑  收藏  举报