python请求json返回单引号
Posted
技术标签:
【中文标题】python请求json返回单引号【英文标题】:python requests json returns single quote 【发布时间】:2016-01-29 20:51:05 【问题描述】:我正在使用谷歌位置api 和请求
我明白了:
r = requests.get(self.url, params='key': KEY, 'location': self.location, 'radius': self.radius, 'types': "airport", proxies=proxies)
r 返回一个 200 代码,很好,但我对 r.json() 与 r.content 相比返回的内容感到困惑
r.json() 的提取:
u'html_attributions': [], u'next_page_token ':u'CoQC-QAAABT4REkkX9NCxPWp0JcGK70kT4C-zM70b11btItnXiKLJKpr7l2GeiZeyL5y6NTDQA6ASDonIe5OcCrCsUXbK6W0Y09FqhP57ihFdQ7Bw1pGocLs_nAJodaS4U7goekbnKDlV3TaL8JMr4XpQBvlMN2dPvhFayU6RcF5kwvIm1YtucNOAUk-o4kOOziaJfeLqr3bk_Bq6DoCBwRmSEdZj34RmStdrX5RAirQiB2q_fHd6HPuHQzZ8EfdggqRLxpkFM1iRSnfls9WlgEJDxGB91ILpBsQE3oRFUoGoCfpYA-iW7E3uUD_ufby-JRqxgjD2isEIn8tntmFDjzQmjOraFQSEC6RFpAztLuk7l2ayfXsvw4aFO9gIhcXtG0LPucJkEa2nj3PxUDl', u'results': [u'geometry': u'location': u'lat': -33.939923, 你'lng':151.175276,
同时提取 r.content :
“\ n ”个html_attributions“:[],\ n ”个next_page_token“:“CoQC-QAAABT4REkkX9NCxPWp0JcGK70kT4C-zM70b11btItnXiKLJKpr7l2GeiZeyL5y6NTDQA6ASDonIe5OcCrCsUXbK6W0Y09FqhP57ihFdQ7Bw1pGocLs_nAJodaS4U7goekbnKDlV3TaL8JMr4Xp P>
所以 r.content 有双引号,就像一个“正确”的 json 对象,而 r.json() 似乎 改变了单引号中的所有双引号。
我应该关心还是不关心?我仍然可以正常访问 r.json() 内容,只是想知道这对于返回带有单引号的对象的请求是否正常。
【问题讨论】:
json()
方法不会为您提供原始 JSON。它为您提供了一个 Python 对象(字典和列表的嵌套组合)。
json.dumps(r.json())
将为您提供有效的 JSON
【参考方案1】:
json()
方法实际上并不返回 JSON。它返回一个 python 对象(读取:字典),其中包含与 json 数据相同的信息。当您打印出来时,为了便于阅读,会添加引号,它们实际上并不在您的数据中。
我应该关心还是不关心?
不是。
【讨论】:
应该有人关心吗?可能是。这取决于对输出做了什么。如果正在代码中进行进一步处理,则对 dict 进行操作可能会很好。但是,如果输出被发送到控制台、文件或其他需要使用双引号正确格式化 json 的工具:是的,你应该关心。 (想到 json 美化工具)。 是的,你应该关心,当尝试将它插入 mysql 时,例如插入 json 数据类型属性 => 它将失败,因为它不是有效的 json @lolo:如果您将其插入到接受 JSON 的数据库中,则不必使用json()
方法,您只需插入原始数据即可。 .json()
不是“将其转换为 json”,而是“解码此 JSON 数据”。【参考方案2】:
但是你可以添加
jsonresponse=json.dump(requests.get(xxx).json())
为了在jsonresponse中得到有效的json。
【讨论】:
使用json.dumps(resp.json())
***.com/questions/46396827/…【参考方案3】:
Python 对字符串使用单引号或双引号。默认情况下,它将显示字符串的单引号。 但是,JSON 规范只考虑用双引号来标记字符串。
请注意,请求的 response.json() 将返回原生 Python 类型,它们与您在 response.content 中看到的 JSON 表示略有不同。
【讨论】:
【参考方案4】:您看到单引号是因为您查看的是 Python,而不是 JSON。
调用Response.json
会尝试将响应的内容解析为 JSON。如果成功,它将返回字典、列表和原生 Python 类型的组合,正如@Two-Bit Alchemist 在他的评论中提到的那样。
在幕后,json
方法只是在响应文本 (see here) 上调用 complexjson.loads
。如果您进一步挖掘requests.compat
模块以找出complexjson
是什么,它是simplejson
包,如果它可以在系统上导入(即已安装)和标准库json
包否则(@ 987654323@)。因此,关于编码的模考虑,您可以读取对Response.json
的调用,相当于:
import requests
import json
response = requests.get(...)
json.loads(response.text)
TL;DR:没有任何令人兴奋的事情发生,不,从 Response.json
返回的不是有效的 JSON,而是转换为 Python 数据结构和类型的有效 JSON。
【讨论】:
以上是关于python请求json返回单引号的主要内容,如果未能解决你的问题,请参考以下文章
python打印日志(logging)字典是单引号,转json时不识别单引号,怎么能打印出来时双引号