我有Decimal('3.9')一个对象的一部分,并希望将其编码为 JSON 字符串,该字符串应类似于{'x': 3.9}。我不关心客户端的精度,因此浮点数就可以了。
Decimal('3.9')
{'x': 3.9}
有没有好的方法来序列化它? JSONDecoder 不接受 Decimal 对象,并且事先转换为浮点数会导致{'x': 3.8999999999999999}错误,并且会浪费大量带宽。
{'x': 3.8999999999999999}
要Decimal在 Python 中将对象序列化为 JSON,同时保留其预期的精度(在本例中,将其转换为浮点数而不保留不必要的精度),您可以使用模块中的default参数自定义序列化过程。以下是实现方法:json.dumps()``json
Decimal
default
json.dumps()``json
float
json.dumps()
以下代码示例演示了如何实现这一点:
import json from decimal import Decimal # Example object containing Decimal data = {'x': Decimal('3.9')} # Custom function to serialize Decimal to float with controlled precision def decimal_default(obj): if isinstance(obj, Decimal): return float(f'{obj:.6f}') # Adjust precision as needed raise TypeError(f'Object of type {type(obj)} is not JSON serializable') # Serialize to JSON using custom function json_str = json.dumps(data, default=decimal_default) print(json_str) # Output: {"x": 3.9}
f'{obj:.6f}'
default=decimal_default
通过遵循此方法,您可以Decimal在 Python 中将对象序列化为 JSON,同时控制精度并避免由于浮点精度过高而导致不必要的带宽使用。'.6f'根据您的特定需求调整精度(在示例中)。
'.6f'