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

Python JSON编码器将NaN改为'null'

金秦斩
2023-03-14
问题内容

我正在编写代码以接收能够转换为JSON的任意对象(可能是嵌套的)。

Python内置JSON编码器的默认行为是将NaN转换为NaN,例如json.dumps(np.NaN)结果为NaN。如何将此NaN值更改为'null'

我试图继承JSONEncoder并重写default()方法,如下所示:

from json import JSONEncoder, dumps
import numpy as np

class NanConverter(JSONEncoder):
    def default(self, obj):
        try:
            _ = iter(obj)
        except TypeError:
            if isinstance(obj, float) and np.isnan(obj):
                return "null"
        return JSONEncoder.default(self, obj)

>>> d = {'a': 1, 'b': 2, 'c': 3, 'e': np.nan, 'f': [1, np.nan, 3]}
>>> dumps(d, cls=NanConverter)
'{"a": 1, "c": 3, "b": 2, "e": NaN, "f": [1, NaN, 3]}'

预期结果: '{"a": 1, "c": 3, "b": 2, "e": null, "f": [1, null, 3]}'


问题答案:

这似乎实现了我的目标:

import simplejson


>>> simplejson.dumps(d, ignore_nan=True)
Out[3]: '{"a": 1, "c": 3, "b": 2, "e": null, "f": [1, null, 3]}'


 类似资料:
  • 众所周知,NaN在算术中传播,但我找不到任何演示,所以我写了一个小测试: 这个例子(在这里实时运行)基本上产生了我所期望的(消极有点奇怪,但它有点道理): 2015年MSVC奥运会产生了类似的东西。然而,英特尔C 15生产: 具体来说,。 这...不可能是对的,对吧?相关标准(ISO C,ISO C,IEEE 754)对此有什么说法,为什么编译器之间的行为会有差异?

  • 问题内容: 我在python上有一个数组A,它具有由numpy.nan创建的一些nan值。我想使用将所有nan值设置为零。它根本不会改变数组。这是为什么? 问题答案: 您要: 您的代码存在的问题是(根据IEEE),它不等于任何东西,甚至不等于它本身。 附带一提的是, ->(+/-无限) ->(不是无穷大或NaN) ->(+无限) ->(-无限)

  • 问题内容: 我在将URL编码为URI时遇到问题: 这不能满足我对以下URL的期望: 传递字符串: http://m.bloomingdales.com/img?url=http%3A%2F%2Fimages.bloomingdales.com%2Fis%2Fimage%2FBLM%2Fproducts%2F3%2Foptimized%2F1140443_fpx.tif%3Fwid%3D52%26q

  • 我试图找到一种方法,可以将WinAnsiEncoding更改为Unicode,我试着像这样设置字体, 对于简单的文本,这很好,我可以看到Helvetica的字体变化,但是如果文本包含UTF-8字符(例如,U+0083等),我只会看到抛出以下异常, java.lang.IllegalArgumentException:U+0083在此字体的编码中不可用:WinAnsiEncoding org.apa

  • 我正在使用带有Selenium的testNG。我有两种记录器,一种是log4j记录器,另一种是testNG reporter.log()。现在的问题是我需要记录一些中文文本。但它是作为‘????’而不是中文文本。所以我更改了log4j.properties文件,只添加了两行: 现在,在我的log4j日志中,它是正确的,但在testNG Reporter.log()中,它仍然是“?????”。

  • Dokuwiki编辑器问题 1:Dokuwiki环境搭建 1.1:Dokuwiki自带安装文件 安装文件入口:/install.php 界面安装很方便 1.2:Dokuwiki自带zh-cn包 2:直接拷贝图片到编辑器   2.1:自带编辑器介绍 自带编辑器不支持所见所得,依靠一些标签来建立目录和页面排榜,尽管标签很强大,但是对于初学者或者不熟悉的人来说,比较麻烦. 2.2:更换流程及需求分析思考