2017-02-11 144 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 –

相关问题