本文介绍Python的json模块的用法。
一、简介
1、JSON简介
JSON是(JavaScript Object Notation)的缩写,是一种轻量级的数据交换格式,常被用于Web应用程序中,也被广泛地应用于非Web应用程序中。
2、模块介绍
import json |
Python的json模块是Python官方提供的一个用于解析和生成JSON数据格式的库。 JSON格式的数据由键值对组成,键一定是字符串,值可以是字符串、数字、布尔值、列表、字典等。
二、常用函数
1、Python对象序列化为JSON编码字符串
函数:
json.dumps()
其他常用参数说明:dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
函数参数说明:
参数 | 说明 |
---|---|
skipkeys | 如果为True的话,则只能是字典对象,否则会TypeError错误, 默认False |
ensure_ascii | 默认为True,它保证输出每个字符都是ASCII字符。如果有些字符不能编码为ASCII字符,他们会被转义为Unicode转义字符,只有当值为False时,汉字才可以正常显示 |
indent | 用于控制缩进格式,默认不缩进 |
cls | 自定义序列化类,用于自定义类的序列化,后面会讲到 |
separators | 序列化之后的字符串中不同部分的分割符。默认为(‘,’,’:’) |
sort_keys | 用于指定是否按照键进行排序,默认为False不排序 |
代码示例:
import json |
输出:
{ |
2、Python原始类型向JSON类型转换
对应关系:
Python | JSON |
---|---|
str,unicode | string |
int,long,float | number |
True | true |
False | false |
None | null |
dict | object |
list,tuple | array |
3、JSON编码的字符串解码为Python对象
函数:
json.loads()
其他常用参数说明:loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
函数参数说明:
参数 | 说明 |
---|---|
cls | 支持自定义类的解码器,需要继承一个JSONDecoder类并重载(复写)其中的decode方法。默认值为None |
object_hook | 支持自定义解码过程中的钩子函数,用于控制解码后生成的Python对象的格式和类型。如果json串是数组,对于JSON串中的每个Python对象,该函数都会被调用一次,后面有使用说明。默认值为None |
object_pairs_hook | 类似object_hook,处理的是Python对象而不是Python字典 |
代码示例:
import json |
输出
<class 'dict'> |
4、JSON原始类型向Python类型转换
对应关系:
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number(int) | int,long |
number(float) | float |
true | True |
false | False |
null | None |
5、数据写入到JSON文件
函数:
json.dump()
常用参数说明:dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
函数参数说明:
参数 | 说明 |
---|---|
skipkeys | 如果为True的话,则只能是字典对象,否则会TypeError错误, 默认False |
ensure_ascii | 默认为True,它保证输出每个字符都是ASCII字符。如果有些字符不能编码为ASCII字符,他们会被转义为Unicode转义字符,只有当值为False时,汉字才可以正常显示 |
indent | 用于控制缩进格式,默认不缩进 |
separators | 序列化之后的字符串中不同部分的分割符。默认为(‘,’,’:’) |
sort_keys | 用于指定是否按照键进行排序,默认为False不排序 |
代码示例:
import json |
输出: 当前目录生成一个test.json
文件,内部写入文章信息。
6、JSON文件中读取数据
函数:json.load()
常用参数说明:load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
函数参数说明:
参数 | 说明 |
---|---|
cls | 支持自定义类的解码器,需要继承一个JSONDecoder类并重载(复写)其中的default方法。默认值为None |
object_hook | 支持自定义解码过程中的钩子函数,用于控制解码后生成的Python对象的格式和类型。对于JSON串中的每个Python对象,该函数都会被调用一次。默认值为None |
object_pairs_hook | 类似object_hook,处理的是Python对象而不是Python字典 |
代码示例:
import json |
输出:
<class 'dict'> |
7、自定义json编码,用于将自定义类序列化为json字符串
函数:
json.JSONEncoder()
步骤:
- 定义自定义编码器类,继承自json.JSONEncoder类
- 重写JSONEncoder类的default方法。
代码示例:
import json |
输出:
{ |
8、自定义Python解码,将json字符串反序列化微微自定义类对象
函数:
json.JSONDecoder()
自定义Python解码,将json字符串反序列化微微自定义类对象。
步骤:
- 自定义反序列化类,继承json.JSONDecoder类
- 第一函数钩子,将结果转化为对象
代码示例:
import json |
输出:
json_str = ''' |
<class '__main__.Article'> |
如果json字符串是一列表的形式,
<class 'list'> |