TypeError:JSON对象必须是str,而不是';答复';使用Python3.4

TypeError:JSON对象必须是str,而不是';答复';使用Python3.4,python,json,python-3.x,raspberry-pi,Python,Json,Python 3.x,Raspberry Pi,我遇到了这个错误,我无法找出问题所在: Traceback (most recent call last): File "C:/Python34/Scripts/ddg.py", line 8, in <module> data = json.loads(r) File "C:\Python34\lib\json\__init__.py", line 312, in loads s.__class__.__name__)) TypeError: the JSO

我遇到了这个错误,我无法找出问题所在:

Traceback (most recent call last):
  File "C:/Python34/Scripts/ddg.py", line 8, in <module>
    data = json.loads(r)
  File "C:\Python34\lib\json\__init__.py", line 312, in loads
    s.__class__.__name__))
TypeError: the JSON object must be str, not 'Response'
import requests, json

search_q = input('Enter query: ')

r = requests.get('https://api.duckduckgo.com/?q=%s&format=json&pretty=1' % search_q)

if r.status_code == requests.codes.ok:
    data = json.loads(r)
    node = data['RelatedTopics']['Result']
    print (str(node))
else:
    bad_r.raise_for_status()

无需手动加载JSON;响应有一个
json
方法

data = r.json()

您正在执行
json.loads(r)
并且
r
不是
str
所以
json.loads()
不知道如何处理它


在一般情况下,需要将包含有效JSON的字符串传递给
JSON.loads()
;虽然通常情况下,如果您已经拥有某种类型的Python对象,那么它通常会包含可以从Python处理的属性(或从其内部表示中提取属性的方法),因此,将其转换为JSON以便将其转换为Python对象是没有意义的。

谢谢,但我得到:
TypeError:list索引必须是整数,而不是str
,那么您错误地使用了数据;可能
RelatedTopics
是一个列表,而不是一个dict。如果我想检查返回的数据是否为json,你就是救世主