我在python 2.6中使用标准的json模块来序列化浮点数列表.但是,我得到的结果如下:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Run Code Online (Sandbox Code Playgroud)
我希望浮点数只用两位小数进行格式化.输出应如下所示:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Run Code Online (Sandbox Code Playgroud)
我尝试过定义自己的JSON Encoder类:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Run Code Online (Sandbox Code Playgroud)
这适用于唯一的浮动对象:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Run Code Online (Sandbox Code Playgroud)
但嵌套对象失败:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Run Code Online (Sandbox Code Playgroud)
我不想有外部依赖,所以我更喜欢坚持使用标准的json模块.
我怎样才能做到这一点?
当我使用YAML加载带有e形式的JSON转储的数字时,该数字将作为字符串而不是浮点数加载.
我想这个简单的例子可以解释我的问题.
import json
import yaml
In [1]: import json
In [2]: import yaml
In [3]: All = {'one':1,'low':0.000001}
In [4]: jAll = json.dumps(All)
In [5]: yAll = yaml.safe_load(jAll)
In [6]: yAll
Out[6]: {'low': '1e-06', 'one': 1}
Run Code Online (Sandbox Code Playgroud)
YAML将1e-06加载为字符串而不是数字?我该如何解决?