Python,使用json.loads后编码的一些字符串 - 如何解码它们?

时间:2013-07-23 16:21:59

标签: python json

我正在向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吗?

感谢您的期待,

2 个答案:

答案 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(),即方法而非属性。不知道为什么,但不要对此感到困惑。

相关问题