1

我在“没有 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

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

4

1 回答 1

3

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

您可以使用该字符串编码的方式生成一个文件,如下所示:

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 上,您可能需要花点心思才能发现差异。)

于 2013-02-07T19:57:50.350 回答