我正在尝试在 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(使用前将#替换为@)