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 MySQLdb 将双引号改为单引号

Python-json的双引号被自动转为单引号

python打印日志(logging)字典是单引号,转json时不识别单引号,怎么能打印出来时双引号

Python如何将单引号转换为双引号以格式化为json字符串

使用双引号而不是单引号返回 Python 列表中的变量

JSON中的单引号和双引号