Python请求库:响应返回单引号JSON

iq0todco  于 2023-05-08  发布在  Python
关注(0)|答案(4)|浏览(353)

我在玩Google Places API和请求。
下面是我的代码:

r = requests.get(self.url, params={'key': KEY, 'location': self.location, 'radius': self.radius, 'types': "airport"}, proxies=proxies)

r返回HTTP Status 200,很好,但我对r.json()r.content相比返回的内容感到困惑。
r.json()的提取物:
联系我们[],u'next_page_token':u'CoQC-QAAABT4REkkX9NCxPWp0JcGK70kT4C-zM70b11btItnXiKLJKpr7l2GeiZeyL5y 6NTDQA6ASDonIe5OcCrCsUXbK6W0Y09FqhP57ihFdQ7Bw1pGocLs_nAJodaS4U7goekbnK@lV3TaL8JMr4XpQBvlMN2dPvhFayU6RcF5kwvIm1YtucNOAUk-o4kOOziaJfeLqr3bk_Bq6 DoCBwRmSEdZj34RmStdrX5RAirQiB2q_fHd6HPuHQzZ8EfdggqRLxpkFM1iRSnfls9WlgEJDxGB9 1ILpBsQE3oRFUoGoCfpYA-iW7E3uUD_ufby-JRqxgjD2isEIn8tntmFDjzQmjOraFQSEC6RFpAztLuk7l2ayfXsvw4aFO9gIhcXtG0LPucJkEa2nj3PxUDl',u'results ':[{u'geometry ':{u'location ':{u'lat ':-33.939923,u'lng':151.175276}}
以下是r.content的摘录:
'{\n "html_attributes":[],\n "next_page_token":"CoQC-QAAABT4REkkX9NCxPWp0JcGK70kT4C-zM70b11btItnXiKLJKpr7l2GeiZeyL5y6NTDQA6ASDonIe5OcCrCsUXbK6W0Y09FqhP57ihFdQ7Bw1pGocLs_nAJodaS4U7goekbnKDlV3TaL8JMr4Xp
所以r.content的双引号就像一个“正确的”JSON对象,而r.json()似乎已经 * 改变了 * 单引号中的所有双引号。
我该不该在乎?
我仍然可以很好地访问r.json()内容,只是想知道这是否是正常的请求返回一个带单引号的对象。

ecfsfe2w

ecfsfe2w1#

json()方法实际上并不返回JSON。它返回一个Python对象(读作:dictionary),包含与JSON数据相同的信息。当你打印出来的时候,引号是为了可读性而添加的,它们实际上并不在你的数据中。
我该不该在乎?
没有。

kx1ctssn

kx1ctssn2#

只需使用json.dumps()函数将JSON对象序列化为JSON格式的字符串。
示例:

json_response = json.dumps(requests.get(xxx).json())
sbtkgmzw

sbtkgmzw3#

你看到的是单引号,因为你看到的是Python,而不是JSON。
调用Response.json()尝试将Response的内容解析为JSON。如果成功,它将返回一个 dictslists 和原生Python types 的组合,正如@Two-Bit Alchemist在他的评论中提到的那样。
在幕后,json()方法只是在响应文本上调用complexjson.loads()(参见此处)。如果您进一步深入研究requests.compat模块以了解complexjson是什么,如果它在系统上是可导入的(即,simplejson),则它是simplejson包。安装)和标准库json包(请参阅此处)。因此,考虑到编码的模,您可以将对Response.json的调用等效为:

import requests
import json

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

TL;DR

没有什么令人兴奋的事情发生,不,从Response.json()返回的不是有效的JSON,而是转换为Python * 数据结构 * 和 * 类型 * 的有效JSON。

pprl5pva

pprl5pva4#

Python对字符串使用单引号或双引号。默认情况下,它将显示字符串的单引号。然而,JSON规范只考虑用双引号来标记字符串。
请注意,请求的response.json()将返回 * 原生Python类型 *,这与您在response.content中看到的JSON表示略有不同。

相关问题