Python Json小写nan

2024-04-05

我正在尝试在 python 中解析一些 json,并且我正在利用 NaN。不幸的是,我的源代码将 NaN 写为如下:

{ "foo": nan }

这实际上并不少见;在Python中是这样的float('nan')得到 NaN 和 C++ 输出nan来自 NaN 双精度值。不幸的是,我似乎不知道如何让 python 解析它。我将其放入名为 bar.txt 的文件中并尝试了以下操作:

def foo(s):
    print "hello"
    if s == 'nan' or s == 'NaN':
        return float('nan')
    else:
        return float(s)

def bar(s):
    print "blah"    

with open("bar.txt") as f:
    x = json.load(f, parse_float=foo, parse_constant=bar)

我得到一些回溯,然后是:ValueError: No JSON object could be decoded。 hello 和 blah 都没有被打印,这表明我的回调实际上都没有被调用来处理这种情况。

有什么办法可以很好地做到这一点吗?


有什么办法可以很好地做到这一点吗?

不,仅使用记录的内容是无法做到这一点的json界面。如果您检查 json/scanner.py,您可以看到该字符串NaN被硬编码到词法分析中并且不能被替换。

根据数据的具体性质,您也许可以使用正则表达式来解决您的问题。

import json
import re

j = '{"Number": nan}'
j = re.sub(r'\bnan\b', 'NaN', j)

print json.loads(j)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Json小写nan 的相关文章

随机推荐