Python json模块dumps、loads、dump、load介绍
1. 介绍
在处理数据时,常常需要将数据以某种格式进行序列化和反序列化。JSON(JavaScript Object Notation)是一种常用的数据交换格式,具有简洁、易读、易解析的特点,广泛应用于互联网领域。Python的json
模块提供了一系列函数,用于处理JSON格式数据的编码和解码。
本文将详细介绍json
模块中的4个主要函数:dumps
、loads
、dump
、load
。通过对这4个函数的使用说明和示例代码,帮助读者了解它们的作用和用法。
2. json.dumps()函数
json.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)
函数用于将Python对象转换为JSON字符串。
参数说明
obj
:要进行编码的Python对象,通常是一个字典或列表。skipkeys
:默认为False
,如果设置为True
,则跳过字典中的非字符串类型的键,否则会抛出TypeError
异常。ensure_ascii
:默认为True
,如果设置为False
,则输出的JSON字符串中的非ASCII字符不会被转义,可以直接显示非ASCII字符。check_circular
:默认为True
,如果设置为False
,则禁止检查循环引用的情况,例如一个对象A引用了对象B,而对象B又引用了对象A。allow_nan
:默认为True
,如果设置为False
,则不允许包含NaN
、Infinity
以及-Infinity
这些特殊的浮点数值。cls
:用于自定义编码和解码的类,默认为None
,使用JSONEncoder
类进行编码。indent
:用于控制缩进的空格数,可以是一个整数或字符串。如果是整数n
,表示每一级缩进占用n
个空格;如果是字符串'\t'
,表示使用制表符进行缩进;如果为None
,表示不进行缩进。separators
:用于控制分隔符的字符串,格式为(item_separator, key_separator)
。默认为(', ', ': ')
。default
:指定一个函数,用于将非序列化的对象转换为可序列化的对象。例如,可以指定default=str
将所有非字符串的对象转换为字符串。sort_keys
:默认为False
,如果设置为True
,则输出的JSON字符串中的键按字典顺序排列。
下面通过一个示例代码演示json.dumps()
函数的基本用法。
import json
data = {
'name': 'Alice',
'age': 20,
'gender': 'female'
}
json_str = json.dumps(data)
print(json_str)
输出结果如下所示:
{"name": "Alice", "age": 20, "gender": "female"}
3. json.loads()函数
json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
函数用于将JSON字符串解码为Python对象。
参数说明
s
:要进行解码的JSON字符串。cls
:用于自定义编码和解码的类,默认为None
,使用JSONDecoder
类进行解码。object_hook
:指定一个函数,用于将JSON对象(字典)转换为Python对象。例如,可以指定object_hook=dict
将每个JSON对象转换为dict
类的实例。parse_float
:指定一个函数,用于将JSON中的浮点数转换为可自定义的对象。默认为None
。parse_int
:指定一个函数,用于将JSON中的整数转换为可自定义的对象。默认为None
。parse_constant
:指定一个函数,用于将JSON中的特殊常量(如NaN
、Infinity
)转换为可自定义的对象。默认为None
。object_pairs_hook
:指定一个函数,用于将JSON中的对象(键值对)转换为可自定义的对象。默认为None
。kw
:额外的关键字参数,传递给object_hook
和object_pairs_hook
。
下面通过一个示例代码演示json.loads()
函数的基本用法。
import json
json_str = '{"name": "Alice", "age": 20, "gender": "female"}'
data = json.loads(json_str)
print(data)
输出结果如下所示:
{'name': 'Alice', 'age': 20, 'gender': 'female'}
4. json.dump()函数
json.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)
函数用于将Python对象转换为JSON格式并写入文件。
参数说明
obj
:要进行编码的Python对象,通常是一个字典或列表。fp
:一个可写入数据的文件对象。- 其他参数说明同
json.dumps()
函数。
下面通过一个示例代码演示json.dump()
函数的基本用法。
import json
data = {
'name': 'Alice',
'age': 20,
'gender': 'female'
}
with open('data.json', 'w') as fp:
json.dump(data, fp, indent=4)
with open('data.json', 'r') as fp:
print(fp.read())
运行上述代码后,会在当前目录下生成一个名为data.json
的文件,文件内容如下所示:
{
"name": "Alice",
"age": 20,
"gender": "female"
}
5. json.load()函数
json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
函数用于从文件中读取JSON格式的数据并解码为Python对象。
参数说明
fp
:一个可读取数据的文件对象。- 其他参数说明同
json.loads()
函数。
下面通过一个示例代码演示json.load()
函数的基本用法。
import json
with open('data.json', 'r') as fp:
data = json.load(fp)
print(data)
假设data.json
文件中的内容为:
{
"name": "Alice",
"age": 20,
"gender": "female"
}
运行上述代码后,输出结果如下所示:
{'name': 'Alice', 'age': 20, 'gender': 'female'}
6. 总结
本文对Python的json
模块中的4个主要函数进行了详细介绍,包括dumps
、loads
、dump
和load dumps
函数用于将Python对象转换为JSON字符串,loads
函数用于将JSON字符串解码为Python对象,dump
函数用于将Python对象转换为JSON格式并写入文件,load
函数用于从文件中读取JSON格式的数据并解码为Python对象。
通过这四个函数,我们可以方便地进行JSON数据的编码和解码操作,实现数据的序列化和反序列化。在实际应用中,我们可以将Python对象转换为JSON格式,用于数据的存储、数据的传输等场景。同时,通过读取JSON格式的文件,我们可以将数据解码为Python对象,进而进行数据处理、分析和展示。
在使用这四个函数时,我们可以根据具体需求,灵活选择参数进行定制化操作。例如,可以设置缩进参数indent
,使得输出的JSON字符串更加可读;还可以指定自定义的解码函数object_hook
,将JSON中的对象转换为特定的Python对象。
总之,借助Python的json
模块,我们可以轻松处理JSON数据,实现数据的序列化和反序列化,为我们的数据处理工作带来方便和效率。