我试图让我的JSON编码器转储浮点只有2位小数精度。所以' 2.241'成为' 2.24'
我已在this answer by 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模块没有使用FLOAT_REPR,当我看到它已被覆盖并且解决方案应该根据Alex Martelli工作?
我在两台不同的计算机上测试了这个,它们都在Ubuntu 14.0.4上运行Python 2.7.6。
答案 0 :(得分:2)
由于c_make_encoder
中json.encoder
完成CPython加速,问题就出现了。
如果您将其设置为None
,那么json.encoder.FLOAT_REPR
技巧就可以了
正如在同一question的答案中所解释的那样:
猴子补丁技巧似乎不适用于原版 simplejson模块,如果安装了C加速:
我的实施可以在jsonplustypes repository。
中看到注意:此解决方案不适用于python 3.6 +