ast.literal_评估将unicode码位从\uxxx转换为\\uxxx,如何避免?

2024-09-27 01:20:41 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,下面是处理这个json文件的代码

json.loads(u"\"{\\\"title\\\": \\\"\\\\u5927\\\"}\"")

json.loads将其转换为unicode字符串,请参见下文

^{pr2}$

下面是处理unicode字符串的代码

ast.literal_eval(json.loads(u"\"{\\\"title\\\": \\\"\\\\u5927\\\"}\""))

ast.literal_评估会将其转换为字典,请参见下文

{'title': '\\u5927'}

但我想要的是一本包含以下内容的词典

{'title': '\u5927'}

Tags: 文件字符串代码json字典titleevalunicode
1条回答
网友
1楼 · 发布于 2024-09-27 01:20:41

json.loads("{\"title\": \"\\u5927\"}")将返回一个字典,因此您根本不需要ast.literal_eval。在

d = json.loads("{\"title\": \"\\u5927\"}")

print d
{u'title': u'\u5927'}

type(d)
Out[2]: dict

有关json.loads()json到python的完整转换,请参见this。在

如果您试图解析一个文件,请使用json.load()而不使用s,如下所示:

^{pr2}$

测试:

from io import StringIO

s = StringIO(u"{\"title\": \"\\u5927\"}")

print json.load(s)
{u'title': u'\u5927'}

更新

OP完全改变了json应该解析的内容,这里有另一个解决方案,再次解析json:

json.loads(json.loads(u"\"{\\\"title\\\": \\\"\\\\u5927\\\"}\""))
Out[6]: {u'title': u'\u5927'}

这是因为第一个json.loads将字符串(非json)转换为json字符串,用json.loads再次解析它将最终反序列化它。在

相关问题 更多 >

    热门问题