Python代码可从一些冗长而复杂的JSON文件加载数据:
with open(filename, "r") as f: data = json.loads(f.read())
(注意:最佳代码版本应为:
with open(filename, "r") as f: data = json.load(f)
但两者都表现出相似的行为)
对于许多类型的JSON错误(缺少分隔符,字符串中不正确的反斜杠等),这会打印出一条非常有用的消息,其中包含找到JSON错误的行号和列号。
但是,对于其他类型的JSON错误(包括经典的“在列表中的最后一项上使用逗号”,以及其他诸如大写的true / false),Python的输出仅为:
Traceback (most recent call last): File "myfile.py", line 8, in myfunction config = json.loads(f.read()) File "c:\python27\lib\json\__init__.py", line 326, in loads return _default_decoder.decode(s) File "c:\python27\lib\json\decoder.py", line 360, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "c:\python27\lib\json\decoder.py", line 378, in raw_decode raise ValueError("No JSON object could be decoded") ValueError: No JSON object could be decoded
对于这种类型的ValueError,如何让Python告诉您JSON文件中的错误在哪里?
我发现,在simplejson内置json模块含糊不清的许多情况下,该模块会给出更多的描述性错误。例如,对于列表中最后一项之后的逗号:
simplejson
json
json.loads('[1,2,]') .... ValueError: No JSON object could be decoded
这不是很描述。与以下操作相同simplejson:
simplejson.loads('[1,2,]') ... simplejson.decoder.JSONDecodeError: Expecting object: line 1 column 5 (char 5)
好多了!同样适用于其他常见错误,例如大写True。
True