我有一个 Decimal('3.9')
作为对象的一部分,并希望将其编码为一个 JSON 字符串,它看起来应该像 {'x': 3.9}
。我不关心客户端的精度,所以浮点数很好。
有没有好的方法来序列化这个? JSONDecoder 不接受 Decimal 对象,并且事先转换为浮点数会产生 {'x': 3.8999999999999999}
这是错误的,并且会浪费带宽。
原文由 Knio 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个 Decimal('3.9')
作为对象的一部分,并希望将其编码为一个 JSON 字符串,它看起来应该像 {'x': 3.9}
。我不关心客户端的精度,所以浮点数很好。
有没有好的方法来序列化这个? JSONDecoder 不接受 Decimal 对象,并且事先转换为浮点数会产生 {'x': 3.8999999999999999}
这是错误的,并且会浪费带宽。
原文由 Knio 发布,翻译遵循 CC BY-SA 4.0 许可协议
Simplejson 2.1 及更高版本原生支持 Decimal 类型:
>>> json.dumps(Decimal('3.9'), use_decimal=True)
'3.9'
注意 use_decimal
True
:
def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
encoding='utf-8', default=None, use_decimal=True,
namedtuple_as_object=True, tuple_as_array=True,
bigint_as_string=False, sort_keys=False, item_sort_key=None,
for_json=False, ignore_nan=False, **kw):
所以:
>>> json.dumps(Decimal('3.9'))
'3.9'
希望此功能将包含在标准库中。
原文由 Lukas Cenovsky 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答846 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
子类
json.JSONEncoder
怎么样?然后像这样使用它: