我正在向Google+ API发送GET请求。我相信返回了JSON(虽然我不清楚这一点,但请参阅'响应正文具有以下结构'here)。我使用json.loads将响应转换为python字典。
import requests
payload = {'query':'celery', 'key':'api_key'}
r = requests.get("https://www.googleapis.com/plus/v1/activities?", params=payload)
my_dict = json.loads(r.text)
所有这一切都运行良好,除非似乎部分响应仍然在ecma脚本中编码(再次不确定),因为它们如下所示:
\u06a9\u0634\u0648\u0631\u0646\u062f. \u0627\u0632 \u0633\u0627\u0644\u0647\u0627
我的问题是如何解码这些字符串?它是从Google返回的JSON吗?
感谢您的期待,
答案 0 :(得分:0)
示例中的字符串是UTF16
将它加载到python shell中,如下所示:
s = u"\u06a9\u0634\u0648\u0631\u0646\u062f. \u0627\u0632 \u0633\u0627\u0644\u0647\u0627"
print s
کشورند. از سالها
要在网页中查看,网络服务器必须在Content-Encoding标头中发送正确的编码。
答案 1 :(得分:0)
我发现简单地使用json
对象的response
属性比使用json.loads()
要容易得多:
r = requests.get("https://www.googleapis.com/plus/v1/activities?", params=payload)
my_dict = r.json
或
my_dict = requests.get("https://www.googleapis.com/plus/v1/activities?", params=payload).json
更简洁的版本。
请注意,出于某种原因,documentation on python-requests.org错误地将其显示为.json()
,即方法而非属性。不知道为什么,但不要对此感到困惑。