2017-02-11 128 views
-1

我想從壓縮文件中讀取文件並將數據轉換成json/dictionary。但是我一直在苦苦掙扎的unicode問題。誰能幫忙?如何在Python中將unicode字符串加載到json中?

exfile_obj = tar.extractfile(member) 
data = exfile_obj.read() 
print(type(data)) ## shows str 
print(data) ## it is something like: "{u'building': False, u'displayName': u'Tam\\xe1s Kosztol\\xe1nczi', u'changeSet': {u'items': u'comment'}}" 
json_obj = json.loads(data) # it is a unicode object. 

回答

4

該數據是Python字典的字符串表示形式。您可以使用ast.literal_eval將其轉換爲字典,並且可以使用json.dumps將該字典轉換爲JSON字符串。

import ast 
import json 

src = "{u'building': False, u'displayName': u'Tam\\xe1s Kosztol\\xe1nczi', u'changeSet': {u'items': u'comment'}}" 
data = ast.literal_eval(src) 
print(data) 
j = json.dumps(data) 
print(j) 

輸出

{'building': False, 'displayName': 'Tamás Kosztolánczi', 'changeSet': {'items': 'comment'}} 
{"building": false, "displayName": "Tam\u00e1s Kosztol\u00e1nczi", "changeSet": {"items": "comment"}} 
+0

你的示例返回一個字典(數據= ast.literal_eval(SRC))。但奇怪的是,當我相應地修改我的代碼時,它沒有像我期望的那樣返回。它仍然回來了。我更改的代碼是:exfile_obj = tar.extractfile(member) data = exfile_obj.read() print(type(data)) json_obj = ast.literal_eval(data) print(type(json_obj))##它是a str –

+0

我還發現,當ast.literal_eval從文件中使用open(「example.json」)作爲文件獲取輸入時:src = f.read()(不是來自變量)它返回str。但是,如果ast.literal_eval從變量獲取輸入,它將返回一個字典。 –

+0

當我從文件讀取。數據如下所示:'「{u \'building \':False,u \'displayName \':u \'Tam \\\\ xe1s Kosztol \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ {u \'items \':u \'comment \'}}「\ n'@PM 2Ring –

相關問題