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

时间:2019-01-06 16:51:06

标签: python python-2.7

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

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

然后,我厌倦使用stringreplace("u\'", "'")和其他方法对encode('ascii', 'ignore')进行消毒,但没有成功。

最终有效的方法是使用ast.literal_eval,但我担心使用它。我在网上发现了一些消息来源声称其safe。但是,我还发现其他消息来源声称这是不好的做法,应该避免这种做法。

我还缺少其他方法吗?

1 个答案:

答案 0 :(得分:3)

unicode字符串是在字典上调用class myMenu extends StatefulWidget { State<StatefulWidget> createState() { return mymenu(inputData); } var inputData; myMenu(input) { this.inputData = input; } } class mymenu extends State<myMenu> { var incomingData; var nameees; mymenu(input) { this.incomingData = input; this.nameees = incomingData[0]; } Widget build(BuildContext context) { return DropdownButton<String>( items: incomingData.map((String name) { return DropdownMenuItem<String>( value: name, child: Text(name), ); }).toList(), onChanged: (itemSelectedByUser) { setState(() { nameees = itemSelectedByUser; }); }, value: nameees, ); } } var names = [ "Java", "kotlin", "dart", "Flutter" "ruby", "ruby on Rails", "python", "django", "javascript", "nodejs", "express.js", "vue.js", "react.js" "Facebook", "YouTube", "Twitter", "Safari", "google" ]; var os = ["Windows", "Linux", "MAc", "iOS", "Android"]; var co = ["Samsung", "Apple", "Sony", "Nikon"]; var selectedItem = "Karrar"; 的结果。

unicode

如果您控制执行此操作的代码,最好的解决方法是将其更改为调用>>> d = {u'name': u'myname'} >>> u = unicode(d) >>> u u"{u'name': u'myname'}"

json.dumps

如果您不控制此对象的创建,则需要使用>>> json.dumps(d) '{"name": "myname"}' 来创建字典,因为unicode字符串不是有效的json。

ast.literal_eval

docs确认ast.literal_eval是安全的:

  

可用于安全地评估包含来自不受信任来源的Python值的字符串

您可以可以使用>>> 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'} ,但是由于您无法控制对象的创建,因此无法确定该对象不是由恶意用户制作的,从而导致损坏您的系统。