有效的JSON,但“无法解码JSON对象”

时间:2013-02-07 18:53:16

标签: python json

我在“没有BOM的utf-8”编码文件中有这么短的JSON代码:

{ "paths": ["A:\\path\\to\\dir"],
  "anotherPath": "os.path.join(os.path.dirname( __file__ ), '..')"
}

我通过不同的在线JSON验证器确保其有效性。 但是使用以下Python代码......

jsonfile = "working\\path\\to\\myProgram.conf"
with open(jsonfile) as conf:
    confContent = json.load(conf)
# doStuff...

...我收到此错误:

No JSON object could be decoded

我知道路径是正确的,因为我在不同的地方成功地阅读了它的内容。 什么想法可能是错的?

1 个答案:

答案 0 :(得分:3)

问题是您实际上没有编码为UTF-8而没有BOM的文件。

您可以按如下方式生成具有该字符串编码的文件:

u='''{ "paths": ["A:\\path\\to\\dir"],
  "anotherPath": "os.path.join(os.path.dirname( __file__ ), '..')"
}'''
s=u.encode('utf-8')
with open('test.json', 'wb') as f:
    f.write(s)

'b'是否必要取决于你是使用Python 2还是3,以及你是使用Windows还是Unix。但如果没有必要,那就无害了。)

现在,如果您针对该文件运行代码,则可以正常运行。

但您可以将test.json文件与working\\path\\to\\myProgram.conf文件进行比较,看看有什么区别。 (大多数非Windows系统都带有命令行工具,如hexdump;在Windows上,您可能需要更加有点发现才能发现差异。)