首页 > 编程语言 >Python 中 response.json 和 json.loads 的区别

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

时间:2023-03-01 09:23:35浏览次数:53  
标签:Python json print loads data response

很多时候在 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。

示例

对于下面这段简单的代码:

import requests

response = requests.get('https://api.github.com')
print(response)

data = response.json()
print(data)
print(data["current_user_url"])

可以看出,它就是直接调用 response 函数的 json 函数,最终也成功打印出了结果:

<Response [200]>
{'current_user_url': 'https://api.github.com/user', ...}
https://api.github.com/user

那么,怎么使用 json.loads 得到同样的结果呢,我们知道 response.text 是可以返回响应的字符串的,我们只需要把这个字符串扔给 json.loads 解析就可以了,如下:

import requests
import json

response = requests.get("https://api.github.com")
print(response)

data_text = response.text
data = json.loads(data_text)

print(data)
print(data["current_user_url"])

最终返回了和上面一样的结果。因此,在我这个示例中,resonse.json()json.loads(response.text) 的效果是一样的。

标签:Python,json,print,loads,data,response
From: https://www.cnblogs.com/touryung/p/17166808.html

相关文章

  • 用python编写一个简单的httpserver
    importsocketfrommultiprocessingimportProcessclassCHttpServer(object):def__init__(self):self.m_serverSocket=socket.socket(socket.AF_INET,......
  • python用线性回归预测时间序列股票价格|附代码数据
    原文参考:http://tecdat.cn/?p=4516最近我们被客户要求撰写关于线性回归预测股票价格的研究报告,包括一些图形和统计输出。线性回归在整个财务中广泛应用于众多应用程序中......
  • 蓝桥杯备战日志(Python)19-阅兵方阵&删除字符-(平方和频次统计&字符串字典序)
    阅兵方阵原题X国要参加同盟阅兵活动。主办方要求每个加盟国派出的士兵恰好能组成2个方阵。X国发现弱小的Y国派出了130人的队伍,他们的士兵在行进中可以变换2种队......
  • python之路 78 路飞项目、路飞前台全局css,全局配置文件、安装axios、vue-cookies、ele
    项目演示登录系统管理用户管理角色管理菜单管理部门管理岗位管理最核心创建了用户,授予了角色,因为角色有权限,这个用户就有权限如果这个......
  • python学习——【第十五弹】
    前言上一篇文章​​python学习——【第十四弹】​​​中学习了python中的包与内置模块,这篇文章接着学习python中的文件读写。编码方式在学习文件读写之前,我们先了解下pyth......
  • Python学习笔记
    python()表示元祖,元祖是一种不可变序列创建如:tuple=(1,2,3)取数据tuple[0]......tuple[0,2].....tuple[1,2]......修改元祖:元祖是不可修改的删除元祖de......
  • Python第二天
    反斜线\\、单引号\'、双引号\"单引号、双引号定义一个字符串没有区别,三引号可以换行可以用作多行注释8bit(位)=1byte(字节)1024byte=1kbstr表示字符串(只要是双单引号里的都叫......
  • python爬虫-bs4基础
    #下面的一段HTML代码将作为例子被多次用到.这是爱丽丝梦游仙境的的一段内容(以后内容中简称为爱丽丝的文档):html_doc="""<html><head><title>TheDormouse'ss......
  • linux升级python3.6升级3.7
    1.下载到本地并解压wgethttps://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgztar-zvxfPython-3.7.12.tgzcdPython-3.7.122.编译安装./configure--......
  • json(1)键值对
    好了进入正题json教程(1):键值对其实键值对非常好理解,毕竟生活中处处都有键可以理解为数据的名称值就是数据拿我们的幸运观众举个例子首先,他的名字是李子墨名字就......