【问题标题】:json.loads() fails on my data read from a socketjson.loads() 在我从套接字读取的数据上失败
【发布时间】:2019-12-10 15:47:14
【问题描述】:

我的代码有些问题。在我读取由 Python 服务器中的 Qt 客户端通过套接字接收的 JSON 后,我想获取该 JSON 的所有字段以便我可以使用它,但我收到如下错误:json.decoder.JSONDecodeError: Expecting value:第 1 行第 1 列(字符 0)。这是引发异常的代码。

data = connection.recv(1024)
temp = data.decode("utf-8")
jdata = json.loads(temp)

异常由 json.loads(temp) 引发。我试图确保 load 函数具有正确的类型,我试图将从套接字获得的相同字符串复制到另一个 str 类型中,并且该函数运行良好。有谁知道我是否忽略了什么?

更新:我刚刚发现我从套接字获取的 JSON 的大小与具有相同字符的字符串不同

【问题讨论】:

  • 具有与具有相同字符的字符串不同的大小听起来像非 ascii 字符(需要超过 1 个字节来表示的字符)是否可能您的数据实际上并未编码为 UFT-8?它说它在第一个字符处失败,所以也许你在数据的开头有一个不可打印的字符?

标签: json python-3.x server


【解决方案1】:

异常“json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)”通常表明您尝试加载的数据不是有效的 JSON。

Python JSON Docs

"如果被反序列化的数据不是有效的 JSON 文档,则会引发 JSONDecodeError。" (向下滚动到 json.loads 函数)

你能打印出你的临时变量吗?您将能够看到您尝试 JSONDecode 的值。

【讨论】:

  • 是的,你是对的,事实上 JSON 是无效的,因为即使打印出来的数据是“干净的”,Qt 似乎也会创建一些使 JSON 无效的垃圾字节
猜你喜欢
  • 2014-06-07
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2013-03-18
  • 2013-07-10
相关资源
最近更新 更多