Python 读取json时的eval替代方法

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

我有一个类来解析一些在线词典中的数据,它从json中读取有关word的信息,然后按照json的指示执行方法。 json的一个示例:

{
"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代替解析器。