翼度科技»论坛 编程开发 python 查看内容

Python 中 response.json 和 json.loads 的区别

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
很多时候在 python 中请求 API 我都是一会儿用 response.json,一会儿用 json.loads,但是这两个函数的区别我貌似一直没太搞明白,所以趁着这次就把他们解决掉。
问题分析

resonse.json

此网站对这个函数的解释如下(经过谷歌翻译):
response.json()返回结果的 JSON 对象(如果结果是以 JSON 格式编写的,否则会引发错误)。Python 请求通常用于从特定资源 URI 中获取内容。每当我们通过 Python 向指定的 URI 发出请求时,它都会返回一个响应对象。现在,此响应对象将用于访问某些功能,例如内容、标头等。本文围绕如何从响应对象中检查response.json()展开。它是请求模块中最常用的方法之一。
简单来说就是当我们使用 request 模块请求 API 返回一个 response 对象的时候,调用这个对象的 json 方法,即可获得该 API 的 json 对象,在 Python 中也就是 dict。
json.loads

上面同样的网站里对这个函数也有解释:
json.loads()方法可用于解析有效的 JSON 字符串并将其转换为 Python 字典。它主要用于将由 JSON 数据组成的原生字符串、字节或字节数组反序列化为 Python Dictionary。
使用这个函数需要先 import json,上面的话的意思是,对这个函数传入一个 json 字符串,经过解析会返回一个 Python 中的 dict(即反序列化)。
看完这两个解析,一切都明朗了,resonse.json 是针对 response 对象,而 json.loads 是针对 json 字符串,两者最终都返回 dict。
示例

对于下面这段简单的代码:
  1. import requests
  2. response = requests.get('https://api.github.com')
  3. print(response)
  4. data = response.json()
  5. print(data)
  6. print(data["current_user_url"])
复制代码
可以看出,它就是直接调用 response 函数的 json 函数,最终也成功打印出了结果:
  1. <Response [200]>
  2. {'current_user_url': 'https://api.github.com/user', ...}
  3. https://api.github.com/user
复制代码
那么,怎么使用 json.loads 得到同样的结果呢,我们知道 response.text 是可以返回响应的字符串的,我们只需要把这个字符串扔给 json.loads 解析就可以了,如下:
  1. import requests
  2. import json
  3. response = requests.get("https://api.github.com")
  4. print(response)
  5. data_text = response.text
  6. data = json.loads(data_text)
  7. print(data)
  8. print(data["current_user_url"])
复制代码
最终返回了和上面一样的结果。因此,在我这个示例中,resonse.json() 与 json.loads(response.text) 的效果是一样的。

来源:https://www.cnblogs.com/touryung/p/17166808.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具