2016-02-09 63 views
-2

我得到这个错误,我无法弄清楚的问题是什么:类型错误:JSON对象必须str的,而不是“响应”与Python 3.4

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() 

回答

2

无需手动加载JSON;该响应具有json方法。

data = r.json() 
+0

谢谢,但后来我得到:'TypeError:列表索引必须是整数,而不是str' – Y7da

+0

然后,您正在错误地使用数据;可能'RelatedTopics'是一个列表,而不是字典。 –

+0

如果我想检查返回的数据是否是json? – TomSawyer

0

你正在做json.loads(r)r不是str所以json.loads()不知道该怎么办。

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

相关问题