以下是我在终端通话中收到的错误代码" 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新手。您可以提供的任何信息,无论多么基本,对我都非常有帮助。
谢谢。
答案 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源代码。
另外,我认为最后一行不正确......