我在玩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()
内容,只是想知道这是否是正常的请求返回一个带单引号的对象。
4条答案
按热度按时间ecfsfe2w1#
json()
方法实际上并不返回JSON。它返回一个Python对象(读作:dictionary),包含与JSON数据相同的信息。当你打印出来的时候,引号是为了可读性而添加的,它们实际上并不在你的数据中。我该不该在乎?
没有。
kx1ctssn2#
只需使用
json.dumps()
函数将JSON对象序列化为JSON格式的字符串。示例:
sbtkgmzw3#
你看到的是单引号,因为你看到的是Python,而不是JSON。
调用
Response.json()
尝试将Response的内容解析为JSON。如果成功,它将返回一个 dicts,lists 和原生Python types 的组合,正如@Two-Bit Alchemist在他的评论中提到的那样。在幕后,
json()
方法只是在响应文本上调用complexjson.loads()
(参见此处)。如果您进一步深入研究requests.compat
模块以了解complexjson
是什么,如果它在系统上是可导入的(即,simplejson
),则它是simplejson
包。安装)和标准库json
包(请参阅此处)。因此,考虑到编码的模,您可以将对Response.json
的调用等效为:TL;DR
没有什么令人兴奋的事情发生,不,从
Response.json()
返回的不是有效的JSON,而是转换为Python * 数据结构 * 和 * 类型 * 的有效JSON。pprl5pva4#
Python对字符串使用单引号或双引号。默认情况下,它将显示字符串的单引号。然而,JSON规范只考虑用双引号来标记字符串。
请注意,请求的
response.json()
将返回 * 原生Python类型 *,这与您在response.content
中看到的JSON表示略有不同。