繁体   English   中英

ast.literal_eval会将Unicode代码点从\\ uxxxx转换为\\\\ uxxxx,如何避免?

[英]ast.literal_eval will convert unicode code point from \uxxxx to \\uxxxx, how to avoid?

例如,这是处理此json文件的代码

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

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

{"title": "\u5927"}

这是处理Unicode字符串的代码

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

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

{'title': '\\u5927'}

但是我想要的是一本内容如下的字典

{'title': '\u5927'}

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

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

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

type(d)
Out[2]: dict

有关将json.loads() json转换为python的完整json.loads() ,请参见this

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

with open('your-file.json') as f:
    # you can change the encoding to the one you need
    print json.load(f, encoding='utf-8')

测试:

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解析将最终json.loads进行反序列化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM