2013-07-23 39 views
0

我正在向Google+ API發出GET請求。我相信JSON會返回(儘管我不清楚這一點,請參閱'響應主體具有以下結構'here)。我使用json.loads將響應轉換爲Python字典。Python,使用json.loads後編碼的一些字符串 - 如何解碼它們?

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 

我的問題是我怎麼能解碼這些字符串?這是從谷歌返回的JSON嗎?在期待

感謝,

+1

您發佈的響應部分是utf16中的unicode字符串。 –

+0

嗨,謝謝你的回答 - 你怎麼能從字符串中識別出來? – rix

+0

雙字節在\ u之後:) –

回答

0

在您的示例中的字符串是UTF-16

加載它在Python殼這樣的:

s = u"\u06a9\u0634\u0648\u0631\u0646\u062f. \u0627\u0632 \u0633\u0627\u0644\u0647\u0627" 
print s 
کشورند. از سالها 

要看到它的網頁,Web服務器必須發送Content-Encoding標頭中的正確編碼。

+0

問題是關於如何解碼UTF-16字符串,或者將響應對象內容轉換爲有用的數據類型,而不是比這是什麼類型的字符串或如何打印字符串。 – Kudzu

+0

@Kudzu閱讀我和OP之間的評論:)我試圖澄清他收到的內容。這裏沒有複製和粘貼解決方案。 –

+0

@PaoloCasciello嗨感謝您的答案,但我不確定這可以是正確的,因爲字典中的其他波斯語字符呈現良好。它只是一些顯示爲轉義的unicode字符的字符串。 – rix

0

我覺得更容易簡單地使用response對象的json屬性比使用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(),即方法而不是屬性。不知道爲什麼,但不要爲此感到困惑。

+0

這些例子都沒有工作,我試圖將json轉換爲python字典。無論如何感謝 – rix

+0

真的嗎?他們在翻譯中爲我工作 - 即使沒有實際的API密鑰,我也會得到 '>>> my_dict {'error':{'code':400,'message':'錯誤的請求','錯誤': [{'domain':'usageLimits','message':'Bad Request','reason':'keyInvalid'}]}}',這是一個非常有效的'dict'對象。 – Kudzu

相關問題