欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python 中的json模块

程序员文章站 2024-01-12 14:53:40
...

目录

一:Json模块源码中定义的函数

二:json.dumps()

三:json.loads()

四:json.dump()和 json.load()


一:Json模块源码中定义的函数

Python 中的json模块

二:json.dumps()

json模块里的dumps函数是对数据进行编码,形成json格式的数据,我们看一下下面的例子:

import json

data_dict = {"key1": "value1", "key2": "value2", "key4": "value4", "key3": "value3"}
# 有序转换json字符串
json1 = json.dumps(data_dict, sort_keys=True)
# 默认无序
json2 = json.dumps(data_dict)
print(json1)
print(json2)

通过输出的结果很容易看出,通过dumps方法使字典转换成为了json格式,虽然它们非常相似。其中,在dumps里的参数“sort_keys=True”,使得输出json后对key和value进行0~9、a~z的顺序排序,如果不填,则按照无序排列。有时候,通过排序可以方便地比较json中的数据,因此,适当的排序是很有必要的。此外,“Indent”参数表示缩进的意思,它可以使得输出的Json看起来更加整齐好看,可读性更强,例如:

import json

data_dict = {"key1": "value1", "key2": "value2", "key3": "value3"}
# 默认无序
json1 = json.dumps(data_dict, indent=4)
print(json1)

例如源码所示、dumps提供了众多参数、可以参考源码或者官方文档进行探索。建议通过源码探索

列举一下dumps()的部分可填参数:

  1. skipkey:默认为False,当dict对象里的数据不是Python的基本数据类型;(str,unicode,int,long,float,bool,None)时,当skipkey为False,就会报错,如果skipkey为True,则可以跳过这类key;

  2. indent:如果填0或者不填,则按照一行进行打印,否则按照indent的数值显示前面的空格(正整数形式);

  3. separators:分隔符,默认为“(',',':')”,它表示key之间用“,”隔开,key和value之间用“:”隔开;

  4. encoding:编码格式,默认值是UTF-8;

  5. sort_keys:对key、value进行排序,默认值是False,即不排序;

  6. ensure_ascii:默认为True,如果dict对象里含有none-ASCII的字符,则显示\uXX的格式,如果为False,则能正常显示出来;

 三:json.loads()

和dumps相反,loads函数则是将json格式的数据解码,转换为Python字典,我们看一下下面的例子:

import json

data_str = '{"key1": "value1", "key2": "value2", "key3": "value3"}'
# 默认无序
print(type(data_str))
print(data_str)
data_dict = json.loads(data_str)
print(type(data_dict))
print(data_dict)

有时候,输出结果遇到中文的时候,会出现编码格式不一样的情况,显示出为Unicode的编码格式,使得不易读懂,解决办法是添加参数“encoding”参数,即上面的改写成这样:d1 = json.loads(data1,encoding='utf-8')即可。

四:json.dump()和 json.load()

相对于上面所讲的dumps和loads来说,dump和load函数的功能类似,只不过前者是用来处理字符串类型的,而后者是用于处理文件类型的,如下所示:

import json

data = {'str3': 'cat', 'str2': 'fish', 'str1': 'dog'}
with open(' data.txt', '', encoding='utf-8') as f:
    # f. write (json.dumps (data, indent=4))  #和上面的效果一样
    json.dump(data, f, indent=4)  

with open(' data.txt', 'r') as f:
    # d2 = json.loads (f. read())#和上面的效果一样 
    d2 = json.load(f)

注:detect_encoding(b)函数正如文件名所说、为探测文本的编码啊方式。