Python 读取json时的eval替代方法
我有一个类来解析一些在线词典中的数据,它从json中读取有关word的信息,然后按照json的指示执行方法。 json的一个示例:Python 读取json时的eval替代方法,python,json,python-3.x,function,class,Python,Json,Python 3.x,Function,Class,我有一个类来解析一些在线词典中的数据,它从json中读取有关word的信息,然后按照json的指示执行方法。 json的一个示例: { "functions": [ { "name": "find_translations", "properties": { "only_first": false } }, { "name": "find_synonyms", "pro
{
"functions": [
{
"name": "find_translations",
"properties": {
"only_first": false
}
},
{
"name": "find_synonyms",
"properties": {
"number": 5
}
],
"word": "to exuberate",
"language": "angielski",
"target_language": "polski",
"collection": "default"
}
所以,我有一个类,它包含查找翻译和查找同义词的方法。_u_init正在读取json,我想用json中的参数执行函数。
我可以做很多假设,但我想它是不可伸缩的。我可以执行eval(),但这是一个漏洞。我该怎么办?我可以创建一些类似于字典的功能吗
编辑:
这是我的课程(简体):
使用
ast.literal\u eval
作为eval
的更安全的替代方法:
发件人:
ast.literal\u eval
:安全地计算表达式节点或字符串
包含Python文本或容器显示的。字符串或节点
提供的可能仅包含以下Python文本结构:
字符串、字节、数字、元组、列表、dicts、set、boolean和
无
这可以用于安全地评估包含Python的字符串
来自不受信任源的值,无需解析这些值
自己它不能计算任意复杂的参数
表达式,例如涉及运算符或索引的表达式
使用
ast.literal\u eval
作为eval
的更安全的替代方法:
发件人:
ast.literal\u eval
:安全地计算表达式节点或字符串
包含Python文本或容器显示的。字符串或节点
提供的可能仅包含以下Python文本结构:
字符串、字节、数字、元组、列表、dicts、set、boolean和
无
这可以用于安全地评估包含Python的字符串
来自不受信任源的值,无需解析这些值
自己它不能计算任意复杂的参数
表达式,例如涉及运算符或索引的表达式
您可以使用getattr函数调用类的特定方法,如下所示:-
getattr(Parser, function_name_here)(arguments_here)
我想这就是你想要的?我希望它能有所帮助。您可以使用getattr函数调用类的特定方法,如下所示:-
getattr(Parser, function_name_here)(arguments_here)
我想这就是你想要的?我希望这会有帮助。我不确定我是否理解了这个问题,但也许您正在搜索
**kwargs
?这里有一个参考:谢谢,我忘了这个。它解决了我从json传递参数的问题,但我仍然需要执行jsonAh中提到的函数!那还不清楚。。。不,你需要使用一些类似eval的函数,你需要很好地绑定它。创建一个允许函数的“白色”列表,并检查您是否只运行该列表中的json函数。我现在没有一个更安全的方法。。。希望有人有更好的想法…谢谢!我编辑了我的问题。我也想到了Eval,但我不确定这是否是个好主意,如果没有人会发布比你更好的想法,我会使用它。我不确定我是否理解这个问题,但也许你正在搜索**kwargs
?这里有一个参考:谢谢,我忘了这个。它解决了我从json传递参数的问题,但我仍然需要执行jsonAh中提到的函数!那还不清楚。。。不,你需要使用一些类似eval的函数,你需要很好地绑定它。创建一个允许函数的“白色”列表,并检查您是否只运行该列表中的json函数。我现在没有一个更安全的方法。。。希望有人有更好的想法…谢谢!我编辑了我的问题。我也想到了Eval,但我不确定这是否是个好主意,如果没有人会发布比你更好的想法,我会用它。是的,你可以用self代替解析器。是的,你可以用self代替解析器。