【问题标题】:Decoding JSON with Python使用 Python 解码 JSON
【发布时间】:2013-04-07 18:43:06
【问题描述】:

我为什么会得到

ValueError: 无法解码 JSON 对象

从此代码:

import urllib.request,json 

n = urllib.request.urlopen("http://graph.facebook.com/55")
d = json.loads(str(n.readall()))

完整的错误:

Traceback (most recent call last):
  File "<pyshell#41>", line 1, in <module>
    d= json.loads(str(n.readall()))
  File "C:\Python33\lib\json\__init__.py", line 309, in loads
    return _default_decoder.decode(s)
  File "C:\Python33\lib\json\decoder.py", line 352, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python33\lib\json\decoder.py", line 370, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

str(n.readall())的输出:

'b\'{"id":"55","name":"Jillian Copeland","first_name":"Jillian","last_name":"Copeland","username":"JCoMD","gender":"female","locale":"en_US"}\''

也许b 把它扔掉了?

如果这是问题所在,我如何将二进制流从 readall 转换为字符串而不是 b

我正在尝试学习一点 Python,所以请记住这一点。

我在 Windows 中使用 Python 3.3。

【问题讨论】:

标签: python json python-3.x


【解决方案1】:

我相信这是 this question 的完全重复,但遗憾的是没有公认的答案。

在我看来,这是可行的:

import urllib.request,json 

n = urllib.request.urlopen("http://graph.facebook.com/55")
d= json.loads(n.readall().decode('utf-8'))

【讨论】:

  • 如果我不解码,我会得到这个:TypeError: can't use a string pattern on a bytes-like object。我使用的是 python 3.1 而不是 3.3,所以这可能就是原因。
  • 我在这里缺少的是我们如何确定响应是 UTF-8,而不是其他编码。我没有研究如何从 urllib 请求中提取它。
  • content-type 标头告诉你。
猜你喜欢
  • 2013-01-09
  • 1970-01-01
  • 2011-07-21
  • 2016-11-09
  • 1970-01-01
  • 2011-01-20
  • 2013-06-26
  • 1970-01-01
  • 2014-01-19
相关资源
最近更新 更多