我有一个unicode
对象,该对象应表示一个json
,但其中包含unicode u
作为字符串值的一部分,例如u'{u\'name\':u\'my_name\'}'
我的目标是能够将其加载到json
对象中。仅使用json.loads
会失败。我知道发生这种情况是因为u
中的string
并不是可接受的json
格式的一部分。
然后,我厌倦使用string
,replace("u\'", "'")
和其他方法对encode('ascii', 'ignore')
进行消毒,但没有成功。
最终有效的方法是使用ast.literal_eval
,但我担心使用它。我在网上发现了一些消息来源声称其safe。但是,我还发现其他消息来源声称这是不好的做法,应该避免这种做法。
我还缺少其他方法吗?
答案 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'}
,但是由于您无法控制对象的创建,因此无法确定该对象不是由恶意用户制作的,从而导致损坏您的系统。