相关疑难解决方法(0)

格式浮动标准json模块

我在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模块.

我怎样才能做到这一点?

python floating-point formatting json

89
推荐指数
9
解决办法
6万
查看次数

YAML将5e-6加载为字符串而不是数字

当我使用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加载为字符串而不是数字?我该如何解决?

python json dictionary pyyaml

18
推荐指数
3
解决办法
5346
查看次数

标签 统计

json ×2

python ×2

dictionary ×1

floating-point ×1

formatting ×1

pyyaml ×1