JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

作者:编程家 分类: js 时间:2025-11-20

在使用 JSON 序列化时,我们有时可能会遇到一个常见的错误:TypeError: Decimal('34.3') is not JSON serializable。这个错误提示表明我们正在尝试将一个 Decimal 类型的数据转换为 JSON 格式时出现了问题。在本文中,我们将探讨这个错误的原因以及如何解决它。

首先,让我们了解一下 JSON(JavaScript Object Notation)是什么。JSON 是一种常用的数据交换格式,它以易于阅读和编写的文本格式存储数据。在 Python 中,我们可以使用 json 模块将数据转换为 JSON 格式,以便在不同的应用程序之间进行数据交换。

在 Python 中,Decimal 是一个用于高精度计算的数据类型。它可以表示任意大小和精度的十进制数,比如货币计算或科学计算中需要保留小数的情况。然而,由于 Decimal 类型不是 JSON 可序列化的,当我们尝试将它转换为 JSON 格式时,就会出现上述的错误。

那么,如何解决这个问题呢?解决方法之一是定义一个自定义的 JSONEncoder 类,用于将 Decimal 类型转换为可序列化的数据类型。

下面是一个例子,演示了如何使用自定义的 JSONEncoder 类解决 Decimal 类型的序列化问题:

python

from decimal import Decimal

import json

class DecimalEncoder(json.JSONEncoder):

def default(self, obj):

if isinstance(obj, Decimal):

return float(obj)

return super(DecimalEncoder, self).default(obj)

# 示例数据

data = {

'name': 'John Doe',

'age': 25,

'balance': Decimal('34.3')

}

# 使用自定义的 JSONEncoder 类进行序列化

json_data = json.dumps(data, cls=DecimalEncoder)

print(json_data)

在上面的代码中,我们定义了一个名为 DecimalEncoder 的自定义 JSONEncoder 类。我们重写了其 default 方法,检查对象是否是 Decimal 类型,如果是,则将其转换为 float 类型。然后,我们使用这个自定义的 JSONEncoder 类对数据进行序列化,得到一个可以成功转换为 JSON 格式的字符串。

解决 Decimal 类型序列化问题的方法

我们可以通过定义一个自定义的 JSONEncoder 类来解决 Decimal 类型的序列化问题。这个自定义的 JSONEncoder 类可以将 Decimal 类型转换为可序列化的数据类型,从而避免了 TypeError: Decimal('34.3') is not JSON serializable 错误的出现。

通过上面的例子,我们可以看到,在我们使用自定义的 JSONEncoder 类对含有 Decimal 类型的数据进行序列化时,不再出现错误,而是成功地将数据转换为 JSON 格式的字符串。

一下,当我们在使用 JSON 序列化时遇到 TypeError: Decimal('34.3') is not JSON serializable 错误时,可以通过定义一个自定义的 JSONEncoder 类来解决这个问题。这个自定义类可以将 Decimal 类型转换为可序列化的数据类型,从而成功地将数据转换为 JSON 格式。

希望本文对你理解和解决 TypeError: Decimal('34.3') is not JSON serializable 错误有所帮助!