json.encoder.FLOAT_REPR已更改,但没有任何效果[重复]
问题内容:
这个问题已经在这里有了答案 :
如何限制JSONEncoder产生的浮点数的数量? (3个答案)
去年关闭。
我试图使我的JSON编码器转储浮点数只有2个十进制精度。所以‘2.241’变成‘2.24’
我已经阅读了Alex
Martelli的答案
,您可以覆盖json.encoder的默认FLOAT_REPR。我尝试了以下方法:
>>> import json
>>> json.encoder.FLOAT_REPR = lambda o: format(o, '.2f')
但是我没有得到相同的结果:
>>> json.dumps(2.241)
'2.241'
我什至可以验证FLOAT_REPR是否已更改:
>>> print json.encoder.FLOAT_REPR
<function <lambda> at 0xb....>
并按预期工作:
>>> json.encoder.FLOAT_REPR(2.241)
2.24
当我看到内置JSON模块已经被覆盖并且解决方案应该可以正常运行时,为什么内置JSON模块不使用FLOAT_REPR?
我已经在两台不同的计算机上对此进行了测试,它们都在Ubuntu 14.0.4上运行Python 2.7.6。
问题答案:
发生此问题的原因是c_make_encoder
in所完成的CPython加速json.encoder
。
如果您将其设置为,None
则该json.encoder.FLOAT_REPR
技巧将按照以下答案在相同问题上的说明起作用:
如果安装了C加速,则Monkey-patch技巧似乎不适用于原始的simplejson模块:
我的实现可以在jsonplustypes存储库中看到。
注意:此解决方案不适用于python 3.6+