我正在尝试解析python中的一些json,而我正在使用NaN。不幸的是,我的消息来源写NaN如下:
{ "foo": nan }
这实际上并不少见;在python中,float('nan')
获取NaN,C ++从NaN double值输出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
。既不打印也不打印,这表明我的回调实际上都没有被调用来处理这种情况。
有没有办法很好地做到这一点?
答案 0 :(得分:2)
有没有办法很好地做到这一点?
不,仅使用记录的json
接口无法做到这一点。如果检查json / scanner.py,可以看到字符串NaN
被硬编码到词法分析中,无法替换。
根据数据的确切性质,您可以使用正则表达式来解决问题。
import json
import re
j = '{"Number": nan}'
j = re.sub(r'\bnan\b', 'NaN', j)
print json.loads(j)