json模块是 Python 标准库中的一个模块,用于处理 JSON(JavaScript Object Notation)格式的数据。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。模块提供了在 Python 中进行 JSON 编码(序列化)和解码(反序列化)的功能。json

以下是 json模块的主要函数和用法:

1.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 对象 obj转换为 JSON 格式的字符串。

这些参数提供了在序列化过程中控制行为的灵活性,可以根据需要选择适当的参数值。

  • obj:必需参数,要序列化为 JSON 字符串的 Python 对象。通常是字典、列表、元组等可序列化的对象。

  • skipkeys(默认为 False):如果设置为 True,在序列化字典对象时跳过非字符串键。如果字典包含非字符串键,则会引发 。默认情况下,这个参数是 False,表示不跳过非字符串键。TypeError

  • ensure_ascii(默认为 True):如果设置为 True,所有非 ASCII 字符将转义为 ASCII。如果设置为 False,则允许非 ASCII 字符原样输出。默认情况下,这个参数是 True。

  • check_circular(默认为 True):如果设置为 True,检查循环引用(例如,一个对象是另一个对象的属性,而后者又是前者的属性)。如果检测到循环引用,会引发 。如果设置为 False,将不会检查循环引用,但可能导致无限递归和堆栈溢出。默认情况下,这个参数是 True。ValueError

  • allow_nan(默认为 True):如果设置为 True,允许 JSON 中的 NaN、Infinity 和 -Infinity。如果设置为 False,将不允许这些特殊的浮点数值,而是引发 。默认情况下,这个参数是 True。ValueError

  • cls:用于指定自定义的 JSON 编码器类。这个参数应该是一个 JSONEncoder 的子类。默认情况下,使用 类进行编码。json.JSONEncoder

  • indent:用于指定缩进的空格数,使生成的 JSON 字符串更易读。默认情况下,不进行缩进,即不进行格式化。

  • separators:用于指定不同部分之间的分隔符,应该是一个包含两个字符的元组,例如 。第一个字符用于分隔项之间的间隔,第二个字符用于分隔键值对之间的间隔。默认情况下,使用 和 作为分隔符。(',', ':'),:

  • default:用于指定一个函数,用于将非序列化的对象转换为可序列化的类型。例如,可以指定一个函数来处理自定义对象的序列化。默认情况下,如果遇到无法序列化的对象类型,则引发 。TypeError

  • sort_keys(默认为 False):如果设置为 True,在输出 JSON 字符串时对键进行排序。默认情况下,这个参数是 False,表示不对键进行排序。

2.json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separors=None, default=None, sort_keys=False, **kw)

  • 将 Python 对象obj 序列化为 JSON 格式,并写入文件对象 fp
  • 参数与 dumps类似。

3.json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):

将 JSON 格式的字符串s 解码为 Python 对象。

  • s:必需参数,要反序列化的 JSON 格式的字符串。

  • encoding(可选):指定 JSON 字符串的编码方式。默认情况下,json.loads() 将假设输入的 JSON 字符串是使用 UTF-8 编码的。如果 JSON 字符串使用其他编码方式,可以通过这个参数指定编码方式,例如 'utf-16'

  • cls(可选):用于自定义 JSON 解码器的类。这个参数应该是一个 JSONDecoder 的子类。通过传递自定义的解码器类,可以实现更复杂的 JSON 数据解析逻辑。

  • object_hook(可选):用于在解码 JSON 字符串时,对解析出的字典对象进行自定义处理的回调函数。这个函数将在每个解析出的 JSON 对象转换为 Python 字典之后被调用,可以用于执行额外的处理操作,例如将字典转换为自定义对象。

  • parse_float(可选):用于指定 JSON 字符串中浮点数的解析方式的回调函数。默认情况下,json.loads() 将使用 Python 的 float() 函数解析浮点数。

  • parse_int(可选):用于指定 JSON 字符串中整数的解析方式的回调函数。默认情况下,json.loads() 将使用 Python 的 int() 函数解析整数。

  • parse_constant(可选):用于指定 JSON 字符串中特殊常量(如 nulltruefalse)的解析方式的回调函数。默认情况下,json.loads() 将使用 Python 的 NoneTrue 和 False 来表示这些特殊常量。

  • object_pairs_hook(可选):用于在解码 JSON 字符串时,对解析出的字典对象进行自定义处理的回调函数。与 object_hook 不同的是,这个函数将在每个解析出的 JSON 对象转换为 Python 字典的键值对之后被调用。

4.json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):

  • 从文件对象fp 中读取 JSON 数据并解码为 Python 对象fp
  • 参数与 loads类似。

示例:

import json

# 将 Python 对象转换为 JSON 字符串
data = {'name': 'John', 'age': 30, 'city': 'New York'}
json_str = json.dumps(data, indent=2)
print(json_str)

# 将 JSON 字符串转换为 Python 对象
json_data = '{"name": "John", "age": 30, "city": "New York"}'
python_obj = json.loads(json_data)
print(python_obj)
  • 在第一个部分中,json.dumps() 用于将 Python 字典 data 转换为格式化良好的 JSON 字符串,然后使用 print() 打印输出。
  • 在第二个部分中,json.loads() 用于将 JSON 字符串 json_data 反序列化为 Python 对象,并将结果存储在变量 python_obj 中。然后同样使用 print() 打印输出这个 Python 对象。

这个代码演示了在将数据从 Python 对象转换为 JSON 字符串(序列化)和从 JSON 字符串转换回 Python 对象(反序列化)的基本操作。

import json

# 定义一个 Python 字典对象
data = {
    'name': 'John',
    'age': 30,
    'city': 'New York'
}

# 将字典对象保存到 JSON 文件中
with open('data.json', 'w') as f:
    json.dump(data, f)

# 从 JSON 文件中加载数据
with open('data.json', 'r') as f:
    loaded_data = json.load(f)

print(loaded_data)  # 输出: {'name': 'John', 'age': 30, 'city': 'New York'}

在这个例子中:

  • 首先定义了一个简单的 Python 字典data ,其中包含了一些基本的用户信息。
  • 然后,使用json.dump() 将这个字典对象保存到名为data.json 的文件中。通过传递文件对象和字典对象作为参数,json.dump() 将字典对象转换为 JSON 格式的字符串,并将其写入文件中。
  • 接着,使用 json.load()data.json 文件中加载数据。json.load() 从文件中读取 JSON 格式的数据,并将其转换为 Python 对象。
  • 最后,打印加载的数据,验证它与原始字典对象相同。

这个例子展示了如何使用json.dump() 将 Python 对象保存到 JSON 文件中,以及如何使用json.load() 从 JSON 文件中加载数据并将其转换回 Python 对象。

02-09 15:47