python - 显示比 "No JSON object could be decoded"更好的错误消息

标签 python json

从一些长而复杂的 JSON 文件中加载数据的 Python 代码:

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 模块含糊不清的情况下会给出更多描述性错误。例如,对于列表中最后一项后有逗号的情况:

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

关于python - 显示比 "No JSON object could be decoded"更好的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14899506/

相关文章:

python - 如何向使用 tkinter 制作的窗口添加滚动条

python - 如何根据列值拆分数据框,对字符串值进行排序或分组?

python - Flask-SQLAlchemy 数据模型关系问题

json - VBA从集合中获取值?

javascript - 访问嵌套的 JSON 对象

python - 需要帮助才能在 Python 中处理超过 2 个或更多字节的字符

python - django - 如何将现有代码更改为 ModelForm 实例

java - 我可以使用 JSON 在以不同编程语言实现的进程之间进行通信吗?

c# - 在输出参数 CRM 中返回 EntityCollection 时出错

Java JSONObject不会将数组转换为Json?