Python从字符串中删除嵌套的unicode'u'符号

2024-04-19 02:03:32 发布

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

我有一个unicode对象,它应该表示一个json,但是它包含unicode u,作为字符串值的一部分,例如u'{u\'name\':u\'my_name\'}'

我的目标是能够将其加载到json对象中。仅仅使用json.loads是失败的。我知道这是因为u中的string不是可接受的json格式的一部分。你知道吗

然后,我厌倦了用replace("u\'", "'")encode('ascii', 'ignore')和其他方法对string进行消毒,但没有成功。你知道吗

最终奏效的是使用ast.literal_eval,但我担心使用它。我在网上找到了一些声称它的safe的消息来源。但是,我也发现其他来源声称这是不好的做法,应该避免。你知道吗

我还缺少其他方法吗?你知道吗


Tags: 对象方法字符串namejson目标stringmy
1条回答
网友
1楼 · 发布于 2024-04-19 02:03:32

unicode字符串是在字典上调用unicode的结果。你知道吗

>>> d = {u'name': u'myname'}
>>> u = unicode(d) 
>>> u  
u"{u'name': u'myname'}" 

如果控制执行此操作的代码,最好的解决方法是将其改为调用json.dumps。你知道吗

>>> json.dumps(d)
'{"name": "myname"}'

如果不控制此对象的创建,则需要使用ast.literal_eval来创建字典,因为unicode字符串不是有效的json。你知道吗

>>> json.loads(u)
Traceback (most recent call last):
...
ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)


>>> ast.literal_eval(u)
{u'name': u'myname'}

docs确认评估是安全的:

can be used for safely evaluating strings containing Python values from untrusted sources

您可以使用eval,但是由于您不控制对象的创建,因此无法确定它是否由恶意用户创建,从而对您的系统造成损坏。你知道吗

相关问题 更多 >