这是我的情况,我有一个看起来像这样的JSON:
{
"items": [{
"type": "condition",
"data": {
"type": "comparison",
"value1": {
"source": "MyType1",
"component": "Attribute1"
},
"value2": {
"source": "MyType2",
"component": "Attribute2"
},
"operator": "gt"
}
},
{
"type": "then",
"data": {
"result": "failed",
"message": "value1 is too high"
}
}
]
}
并希望将其翻译为:
if (MyType1.Attribute1 > MyType2.Attribute2) {
result = "failed";
console.log("value1 is too high");
}
现在我的问题是,我不知道如何将value1
和value2
的条目翻译成实际代码,或者更确切地说,我如何访问对象MyType1
(也许通过getAttribute("MyType1")
之类的东西。
由于我将拥有一大堆源,每个源都有不同的组件,我真的不能写一个庞大的字典。或者我想避免它。
目标是允许通过一些交互式UI创建if - then - statements
,我认为最好将该代码保存为.json
个文件。 (想想规则管理系统)。
那么,TL,DR,如果我只有一个字符串 MyType ,我将如何访问类属性this.MyType
?如果我得到另一个字符串 MyValue ,我将如何访问值this.MyType.MyValue
?
提前致谢。
修改 出于显而易见的原因,我真的很想避免使用eval。如果我必须 - 我想我需要为可能的JSON值创建字典,以验证输入?
答案 0 :(得分:0)
你需要某种解析器。首先,我们需要一些方法来存储变量和标志:
const variables = {};
var in = false;
然后我们浏览代码并执行它:
for(const command of items){
switch( command.type ){
case "condition":
//...
case "then":
//...
}
}
要访问变量,我们可以简单地执行
var current = variables[ identifier ];
反过来存储它:
variables[ identifier ] = current;