JSON对象必须是str,而不是Response

时间:2017-03-23 12:29:01

标签: python json

我正在向返回JSON文件的网址发送请求

response = requests.get(url)
response = json.loads(response)

然后,我试图浏览一些数据,

for documents in response["docs"]:
    # do something

现在,我得到的错误是

TypeError: the JSON object must be str, not 'Response'

为了避免这种情况,我试过了,

response = requests.get(url).json()

但是,我无法遍历回复,因为我收到了错误:

KeyError: 'docs'

我是Python新手,并不完全了解获取JSON数据并解析它的最佳方法。建议?

以下是收到的数据样本

  

{'状态':'好的','回复':{' meta':{' time' :9,'点击':11,'偏移':0},' docs':[{' type_of_material':'新闻',' pub_date':' 2017-01-01T09:12:04 + 0000',' document_type':' article' ,'以及#39; 5868c7e995d0e03926078885',#39; lead_paragraph':'该国领导人自豪地谈到其核武器和弹道导弹计划的进展。 #39;,.....

2 个答案:

答案 0 :(得分:4)

您正尝试将响应对象提供给json.loads()。您没有在那里获得字符串,而是必须访问.contents.text属性:

response = requests.get(url)
# Python 3
response = json.loads(response.text)
# Python 2
response = json.loads(response.content)

但是,这比你需要做的更多; requests支持直接处理JSON,无需导入json模块:

response = requests.get(url).json()

请参阅requests快速入门文档的JSON Response Content section

加载后,您可以获取doc上键入的嵌套词典中的response键:

for documents in response['response']['docs']:

答案 1 :(得分:0)

requests.get返回一个响应对象,其中包含状态信息,标题等。您需要从此对象访问原始文档文本以解析json或只使用提供的json方法:

response = requests.get(url).json()

(减去错误检查)