我在“没有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
我知道路径是正确的,因为我在不同的地方成功地阅读了它的内容。 什么想法可能是错的?
答案 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上,您可能需要更加有点发现才能发现差异。)