Python Json小写nan
我正在尝试用python解析一些json,我正在使用NaN。不幸的是,我的消息来源写道:Python Json小写nan,python,json,python-2.7,Python,Json,Python 2.7,我正在尝试用python解析一些json,我正在使用NaN。不幸的是,我的消息来源写道: { "foo": nan } 这其实并不少见;在Python中,一个代码“>浮点('n'),以获得一个NANN,C++输出一个Nouthdouble值。不幸的是,我似乎不知道如何让python解析它。我将其放在一个名为bar.txt的文件中,并尝试了以下操作: def foo(s): print "hello" if s == 'nan' or s == 'NaN': re
{ "foo": nan }
这其实并不少见;在Python中,一个代码“>浮点('n'),以获得一个NANN,C++输出一个Nouthdouble值。不幸的是,我似乎不知道如何让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:无法解码任何JSON对象
。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)
如果在没有函数的情况下执行
json.load
,会发生什么?将不会调用parse\u float
参数,因为这不是一个float。如果您不引用它,那就不足以使JSON有效到您的解析器的程度。是什么生成了那个字符串?如果您有NaN
,它将加载
很好。JSON与Python语法不同。您应该修复创建文件的任何内容,以便生成有效的JSON。@ JONRHARPE,另一段代码,用C++编写,在没有特殊外壳的情况下将双份打印到JSON中。在Python和C++中,<代码>楠< /COD>编号的打印表示为:这就是为什么我对没有简单的方法感到惊讶。其他代码应该使用JSON库来打印它,而不是使用C++的内置输出函数。