2012-08-14 44 views
-1

編輯:錯誤沒有出現在提示中,但在下面的Google App Engine環境中。 Code execution environment 我有以下的JSON如何使用python json模塊處理帶有轉義Unicode字符的JSON?

>>>dat = r"""{"name":"Something", "data":"For youth \n\nBe a hero! Donate blood!\n\u091c\u092f \u0939\u093f\u0902\u0926! \u0935\u0928\u094d\u0926\u0947 \u092e\u093e\u0924\u0930\u092e\u094d"}""" 

它包含Unicode轉義字符。 我想解析這個。所以,我沒有

>>>jsDat = json.loads(js) 

然後按照工程

>>>name = jsDat.get('name') 
>>>name = name.encode('ascii') #This is because json module handles in unicode 
>>>print name 
Something 

但是,試圖與Unicode數據的領域,那就是「數據」,則顯示錯誤

>>>data = jsDat.get('data') 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 366-367: ordinal not in range(128) 

我應該如何解析數據?

+0

我根本無法重現您的問題,您確定您在python提示符下執行了此操作嗎? – 2012-08-14 16:18:54

+0

你不能只發布任何帶有錯誤的隨機代碼。您必須發佈產生錯誤的*確切*代碼。 – 2012-08-14 16:24:59

+0

不在提示符上,而是在文件中。我剛剛看到你是對的。在提示符下沒有錯誤。我是在Google App Engine Python環境中完成的。 – Sravan 2012-08-14 16:25:55

回答

1

如果字符超過ASCII字符集,則不能將unicode編碼爲ASCII。如果要強制轉換,丟失數據,你可以這樣做:

data = jsDat.get('data') 
data = data.encode('ascii', 'ignore') 

str.encode商務部有關忽視的更多細節。另外,我不確定你爲什麼要編碼爲ASCII --JSON模塊似乎處理原始字符串就好了?

+0

但是錯誤是在第一行本身? – Sravan 2012-08-14 16:37:10

+0

好的,它的工作。我將它編碼回ascii,因爲python json模塊在unicode中處理它。謝謝! – Sravan 2012-08-14 16:43:33

1

錯誤來自您的'打印'行,只是因爲您試圖打印到'終端',不理解編碼。對JSON對象做其他事情不應該產生錯誤。

相關問題