Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Json小写nan_Python_Json_Python 2.7 - Fatal编程技术网

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

我正在尝试用python解析一些json,我正在使用NaN。不幸的是,我的消息来源写道:

{ "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++的内置输出函数。