json.loads()返回一个unicode对象而不是字典

时间:2014-03-24 02:32:54

标签: python json python-2.7 unicode fabric

我正在使用fabric在远程服务器上的文件中读取json:

from StringIO import StringIO

output = StringIO()
get(file_name, output)

output = output.getvalue()

output的价值现在是:

'"{\\n \\"status\\": \\"failed\\", \\n \\"reason\\": \\"Record already exists.\\"\\n}"'

当我尝试使用json.loads(output)将此字符串解析为字典时,它返回unicode对象u'{\n "status": "failed", \n "reason": "Record already exists."\n}'而不是字典。

我提出了一个相当糟糕的修复方法,只需将新的unicode对象传回json.loads():

json.loads(json.loads(output))

有没有办法解决这个问题?

干杯

2 个答案:

答案 0 :(得分:17)

您的数据已转义。

json.loads(output.decode('string-escape').strip('"'))

应该给你想要的结果:

Out[12]: {'reason': 'Record already exists.', 'status': 'failed'}

答案 1 :(得分:14)

这里的解决方案是弄清楚为什么你的文件首先是双重JSON编码,但是假设通过json.loads两次的数据是正确的方法。