使用json.loads将JSON数组转换为Python列表时,为什么会出现解码器错误?

时间:2016-04-03 15:24:32

标签: python json decoder

以下是我在终端通话中收到的错误代码" python lastYearArray.py"。 (我在运行OSX 10.9.5的MacBook Pro上,在jEdit中编辑我的Python程序)。根据这个链接:TypeError: expected string or buffer看来我正在使用的功能也没有列出。我只是使用JSON文件而不是转换它,但是这个特定的JSON数据没有标题或元素标记,例如" fruits:apple,banana,orange&#34 ;;它只有一长串由逗号和大括号分隔的数字。

Traceback (most recent call last):
      File "lastYearAnalysis.py", line 8, in <module>
        PyListData = json.loads(lastYearArray)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads
        return _default_decoder.decode(s)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    TypeError: expected string or buffer

但是,我不知道为什么会告诉我有关解码器的原因,因为您可以从我这里相当简单的代码中看到:

#Write json array to a python list to find the iterative location of max value
#should return a value such as "[n]" on req for max

import requests
import json

lastYearArray = requests.get('https://api.github.com/repos/mbostock/d3/stats/contributors')
PyListData = json.loads(lastYearArray)
print data[PyListData]

#TODO: ask for max value

我没有使用我能看到的显式解码器功能;我正在使用json.loads。我应该补充一点,我肯定是关于列表和JSON数组解码的Python新手。您可以提供的任何信息,无论多么基本,对我都非常有帮助。

谢谢。

2 个答案:

答案 0 :(得分:1)

requests.get会返回Response个对象。该对象不是字符串对象,因此您无法将其传递给json.loads

您必须使用response.text获取响应对象,并将其传递给json.loads

lastYearArrayResponse = requests.get('…')
data = json.loads(lastYearArrayResponse.text)

或者,您也可以使用response.json()方法获取已解析的响应,因为请求已经内置了对JSON响应的支持:

lastYearArrayResponse = requests.get('…')
data = lastYearArrayResponse.json()

答案 1 :(得分:0)

您忘记在 lastYearArray = 行的末尾添加.text以获取网页的HTML源代码。

另外,我认为最后一行不正确......