Python json模块dumps、loads、dump、load介绍

Python json模块dumps、loads、dump、load介绍

Python json模块dumps、loads、dump、load介绍

1. 介绍

在处理数据时,常常需要将数据以某种格式进行序列化和反序列化。JSON(JavaScript Object Notation)是一种常用的数据交换格式,具有简洁、易读、易解析的特点,广泛应用于互联网领域。Python的json模块提供了一系列函数,用于处理JSON格式数据的编码和解码。

本文将详细介绍json模块中的4个主要函数:dumpsloadsdumpload。通过对这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,则不允许包含NaNInfinity以及-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中的特殊常量(如NaNInfinity)转换为可自定义的对象。默认为None
  • object_pairs_hook:指定一个函数,用于将JSON中的对象(键值对)转换为可自定义的对象。默认为None
  • kw:额外的关键字参数,传递给object_hookobject_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个主要函数进行了详细介绍,包括dumpsloadsdumpload 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数据,实现数据的序列化和反序列化,为我们的数据处理工作带来方便和效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程