当前位置: 首页 > 面试题库 >

显示比“无法解码JSON对象”更好的错误消息

姜俊友
2023-03-14
问题内容

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

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代码可从一些冗长而复杂的JSON文件加载数据: (注意:最佳代码版本应为: 但两者都表现出相似的行为) 对于许多类型的JSON错误(缺少分隔符,字符串中不正确的反斜杠等),这会打印出一条非常有用的消息,其中包含找到JSON错误的行号和列号。 但是,对于其他类型的JSON错误(包括经典的“在列表中的最后一项上使用逗号”,以及其他诸如大写的true / false),Pytho

  • 问题内容: 我在JSON方面遇到问题,我似乎无法弄清为什么它不起作用。这应该输出JSON。 这是我的代码 我收到这个错误 如果有人可以救援,那就太好了! 问题答案: 看来您的JSON无效。在这种情况下,这完全取决于服务器发送给您的数据(您未显示)。我建议通过JSON验证程序运行响应。

  • 我有一个json转储为 我编写了一个小代码来从json获取一些详细信息 这给我造成了错误: 回溯(最近一次调用):文件“python_opennms.py”,第24行,in x=get_nodes_opennms()文件“python_opennms.py”,第15行,in get_nodes_opennms for i in JSON.load(open('out.txt'))[“alarm”]

  • 问题内容: 我有以下JSON数据: 使用JSON-to-Go,我得到以下Go类型定义: 使用此代码(play.golang.org) 我得到错误 我不明白为什么。你能帮助我吗? 问题答案: JSON源是单个对象,但是您尝试将其解组为切片。将类型更改为(非切片): 然后输出(在Go Playground上尝试):

  • 我正在寻找一种更好的方法来迭代一个对象并显示它的内容。 FormController: DB.Class函数(): 窗体视图: Db连接: 多谢您提前帮忙!

  • 问题内容: 我正在尝试向我的Watchkit扩展发送“类”,但出现此错误。 由于未捕获的异常’NSInvalidUnarchiveOperationException’而终止应用程序,原因:’ -[NSKeyedUnarchiver encodeObjectForKey:]:无法解码类(MyApp.Person)的对象 存档和取消存档在iOS App上运行良好,但在与watchkit扩展进行通信时