JSON,node.js:通过名称访问类(String)

时间:2017-09-19 12:28:45

标签: javascript json node.js

这是我的情况,我有一个看起来像这样的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");
}

现在我的问题是,我不知道如何将value1value2的条目翻译成实际代码,或者更确切地说,我如何访问对象MyType1(也许通过getAttribute("MyType1")之类的东西。 由于我将拥有一大堆源,每个源都有不同的组件,我真的不能写一个庞大的字典。或者我想避免它。

目标是允许通过一些交互式UI创建if - then - statements,我认为最好将该代码保存为.json个文件。 (想想规则管理系统)。

那么,TL,DR,如果我只有一个字符串 MyType ,我将如何访问类属性this.MyType?如果我得到另一个字符串 MyValue ,我将如何访问值this.MyType.MyValue

提前致谢。

修改 出于显而易见的原因,我真的很想避免使用eval。如果我必须 - 我想我需要为可能的JSON值创建字典,以验证输入?

1 个答案:

答案 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;