Python Json小写南

时间:2016-12-13 19:49:56

标签: python json python-2.7

我正在尝试解析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。既不打印也不打印,这表明我的回调实际上都没有被调用来处理这种情况。

有没有办法很好地做到这一点?

1 个答案:

答案 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)