第二十一篇 json和picklz模块

Json模块

Json模块比较简单,仅有四个方法dumps()和loads()方法,dump()和load()方法,但是却非常的常用,实用性极强。

如果要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如xml,但更好的方法是序列化为JSON,因为json表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。

Json不仅是标准格式,而且比xml更快,还可以直接在web页面中读取,非常方便。

Json表示的对象就是标准的JavaScript语言的对象,Json和Python内置的数据类型对应如下:

Json类型 Python内置类型
{} dict
[] list
"string" str
123/123.34 int/float
true/false  True / False
null  None
import json

dic = {'name':'chen'}
i = 8
s = 'hello'
l = [1,2,3]

# json.dumps 会把字符串里所有的单引号都变成双引号

data_dic = json.dumps(dic)               # 第一步:把dic的值变成双引号,{"name":"chen"},第二步:再把这个值变成json的字符串:'{"name":"chen"}'
print(data_dic)   # {"name": "chen"}   
print(type(data_dic))  # <class 'str'>

i = json.dumps(i)                        # 第一步:把i的值变成双引号,"8",第二步:再把这个值变成json的字符串:'"8"'
print(i)        # 8 
print(type(i))  # <class 'str'>

s = json.dumps(s)                 # 第一步:把s的值变成双引号,"hello",第二步:再把这个值变成json的字符串:'"hello"'
print(s)          # "hello"
print(type(s))  # <class 'str'>
 
l = json.dumps(l)                
print(l)        #  [1, 2, 3]
print(type(l))  #  <class 'str'>


# 从上面的结果可以看到,json.dumps()首先会把所有数据类型的值都变成双引号(因为json只认双引号),然后再把这个值变成字符串

dumps()和loads()方法

# 上面已经把各种数据类型都通过json.dumps()方法处理成了json格式的字符串,然后把字符串写入到new_dic文件

# json.dumps()是-----序列化
dic = {'name':'chen'}
dic_str = json.dumps(dic)
f = open('new_dic','w', encoding = 'utf-8')
f.write(dic_str)
f.close

# json.loads()是------反序列化
# 最后再读取new_dic内的文件
f_read = open('new_dic','r', encoding = 'utf-8')
data  = json.loads(f_read.read())
print(data)            #  {'name': 'chen'}
print(type(data))      #   <class 'dict'>
print(data['name'])    #  chen

dump()和load()方法

# dump()和load()可以简化dumps()和loads()的处理过程

# 上面的如果要写一个字典到文件里,实现序列化,使用dumps()的代码如下:
dic = {'name':'chen'}
f = open('new_dic','w', encoding = 'utf-8')
# 下面的两行会被dump()直接简化处理掉
dic_str = json.dumps(dic)
f.write(dic_str)
f.close()

# 而如果使用dump()方法,代码如下:
dic = {'name':'chen'}
f = open('new_dic','w', encoding = 'utf-8')
json.dump(dic,f)
f.close()


# 同理,如果想从文件里读取内容,实现反序列化,使用loads()代码如下:
f_read = open('new_dic','r', encoding = 'utf-8')
data  = json.loads(f_read.read())

# 而如果使用load()方法,代码如下:
f_read = open('new_dic','r', encoding = 'utf-8')
data = json.load(f_read)
print(data)   # {'name': 'chen'}


# 虽然dump()和load()可以简化dumps()和loads(),但是太定制化了,仅限于对文件的处理。 所以,建议在程序开发中还是使用dumps()和loads()方法,因为还有其他数据类型的处理呢。

猜你喜欢

转载自www.cnblogs.com/victorm/p/9252085.html
今日推荐