【问题标题】:Python - No JSON can be decoded [closed]Python - 无法解码 JSON [关闭]
【发布时间】:2020-09-15 09:17:53
【问题描述】:

我收到关于我的 JSON 未解码的错误。

来自端点的 JSON 输出:

{"id":"16","otherid":"43sfd","happened":"2020-09-11"},{"id":"23","idd":"otherid","happened":"2020-09-10"},{"id":"12","otherid":"4543","happened":"2020-09-10"},

我的代码:

url = "endpoint url goes here"
response = requests.request("GET", url)
r = json.loads(response.text)
columns = r
rows_list = r["id"]
headers = []
for column in columns.keys():
    headers.append(column)

错误:

Script is Invalid, Exception: { "stackTrace": [ [ "/var/task/customconnect7343017969486770267.py", 7, "py", "r = json.loads(response.text)" ], [ "/usr/lib64/python2.7/json/__init__.py", 338, "loads", "return _default_decoder.decode(s)" ], [ "/usr/lib64/python2.7/json/decoder.py", 363, "decode", "obj, end = self.raw_decode(s, idx=_w(s, 0).end())" ], [ "/usr/lib64/python2.7/json/decoder.py", 381, "raw_decode", "raise ValueError(\"No JSON object could be decoded\")" ] ], "errorType": "ValueError", "errorMessage": "No JSON object could be decoded" }Run Log:

我解析 json 的方式可能是错误的。我该如何解决?还是我的 JSON 输出错误?

【问题讨论】:

  • 请使用完整的错误回溯更新您的问题。
  • 你试过json.loads(response.json())吗?
  • 您显示的不是有效的 JSON。它的形式是 a, b, c,,但 JSON 是 [a, b, c](注意括号和缺少尾随逗号)。请检查端点是否真正声称提供 JSON 或其他内容。

标签: python json parsing


【解决方案1】:

这是一个错误的 JSON 数组 ({},{},{},):

  • 缺少括号 ([])
  • JSON 不允许尾随逗号(尽管 Python 和 JavaScript 都允许像 [1,2,] 这样的列表/数组,但它对 JSON 无效)

所以应该是[{"id":"16","otherid":"43sfd","happened":"2020-09-11"},{"id":"23","idd":"otherid","happened":"2020-09-10"},{"id":"12","otherid":"4543","happened":"2020-09-10"}],然后就可以了:

>>> import json
>>> json.loads('[{"id":"16","otherid":"43sfd","happened":"2020-09-11"},{"id":"23","idd":"otherid","happened":"2020-09-10"},{"id":"12","otherid":"4543","happened":"2020-09-10"}]')
[{'id': '16', 'otherid': '43sfd', 'happened': '2020-09-11'}, {'id': '23', 'idd': 'otherid', 'happened': '2020-09-10'}, {'id': '12', 'otherid': '4543', 'happened': '2020-09-10'}]

我建议修复端点,使其返回有效的 JSON。但是如果你真的想要,当然可以在 Python 端通过一些字符串操作来修复它。

【讨论】:

    【解决方案2】:

    如果来自服务器的响应是 JSON。你可以使用:

    response = requests.request("GET", url).json()
    

    它会直接返回一个字典给你,当然假设请求是成功的。您应该先验证status_code

    【讨论】:

    • 你怎么知道这是问题所在?
    • @deadshot 没有完整的堆栈跟踪并给出他的日志中的错误,似乎使用json() 方法可以为他解决问题或让他知道问题出在响应而不是试图找到它的起源。
    猜你喜欢
    • 2016-01-16
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多