当前位置: 首页 > 面试题库 >

格式使用标准json模块浮动

程树
2023-03-14
问题内容

我正在使用python
2.6中的标准json模块来序列化浮点列表。但是,我得到这样的结果:

>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'

我希望浮点数仅使用两位十进制数字进行格式化。输出应如下所示:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'

我尝试定义自己的JSON Encoder类:

class MyEncoder(json.JSONEncoder):
    def encode(self, obj):
        if isinstance(obj, float):
            return format(obj, '.2f')
        return json.JSONEncoder.encode(self, obj)

这适用于唯一的float对象:

>>> json.dumps(23.67, cls=MyEncoder)
'23.67'

但是对于嵌套对象失败:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'

我不想有外部依赖性,所以我更喜欢使用标准的json模块。

我该如何实现?


问题答案:

注: 这并 没有 任何最新版本的Python的工作。

不幸的是,我相信您必须通过猴子补丁来做到这一点(我认为这表明标准库json软件包中存在设计缺陷)。例如,此代码:

import json
from json import encoder
encoder.FLOAT_REPR = lambda o: format(o, '.2f')

print(json.dumps(23.67))
print(json.dumps([23.67, 23.97, 23.87]))

发出:

23.67
[23.67, 23.97, 23.87]

如您所愿。显然,应该有一种结构化的方法来覆盖它,FLOAT_REPR以便您可以控制浮点数的每个表示形式;但不幸的是,这不是json包装的设计方式:-(。



 类似资料:
  • 本文向大家介绍Python标准库json模块和pickle模块使用详解,包括了Python标准库json模块和pickle模块使用详解的使用技巧和注意事项,需要的朋友参考一下 将Python数据类型转换为其他代码格式叫做(序列化),而json就是在各个代码实现转换的中间件。 序列化要求: 1. 只能有int,str,bool,list,dict,tuple的类型支持序列化。 2. json序列化是

  • 问题内容: 是否存在用于构造来自API的JSON响应的标准或最佳实践?显然,每个应用程序的数据都是不同的,因此您不必担心很多,而是“响应样板”。我的意思的例子: 成功的请求: 请求失败: 问题答案: 是的,已经出现了一些标准(尽管对标准的定义有一些自由): JSON API -JSON API还涵盖创建和更新资源,而不仅仅是响应。 JSend-简单,可能已经在做。 OData JSON协议 -非常

  • 前面我们介绍了 os 模块和 re 模块,本章再介绍 Python 常用的一些标准模块: argparse base64 collections datetime hashlib hmac 其中: argparse 是用于创建命令行的库; base64 是用于 base64 编码和解码的库; collections 模块提供了 5 个高性能的数据类型,如 Counter,OrderedDict 等

  • JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的 javascript 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 1. 概述 1.1 jso

  • HMAC 是用于消息认证的加密哈希算法,全称是 keyed-Hash Message Authentication Code。HMAC 利用哈希算法,以一个密钥和一个消息作为输入,生成一个加密串作为输出。HMAC 可以有效防止类似 MD5 的彩虹表等攻击,比如将常见密码的 MD5 值存入数据库,可能被反向破解。 Python 的 hmac 模块提供了 HMAC 算法,它的使用形式是: hmac.n

  • Python 内置的 hashlib 模块提供了常见的摘要算法(或称哈希算法,散列算法),如 MD5,SHA1, SHA256 等。摘要算法的基本原理是:将数据(如一段文字)运算变为另一固定长度值。 MD5 (Message-Digest Algorithm 5, 消息摘要算法),是一种被广泛使用的密码散列函数,可以产生出一个 128 位(16 字节)的散列值(hash value),用于确保信息