如何使用 JINT 库从 Javascript 获取 JSON 值

mon*_*tro 2 javascript c# json jint

我有这个 JavaScript 文件:

var input = {
  "CONTRATE": 0,
  "SALINC": 0,
  "RETAGE": 55.34,
  "MARSTATUS": "single",
  "SPOUSEDOB": "1970-01-01",
  "VIEWOPTION": "pension"
};

var inputValidation = "input.CONTRATE > 50 && input.SALINC < 50 && input.RETAGE > 50";

eval(inputValidation);
Run Code Online (Sandbox Code Playgroud)

如何使用 JINT 作为 JSON 对象字符串获取“输入”变量的 JSON 值?

use*_*830 5

我相信我们可以通过三种方式达到预期的结果

方法 1 - 使用 Jint 的内置解析器

Jint 有内置的解析器来支持javascriptJSON.parse和函数。JSON.stringify我们可以使用它们来完成此任务:

        var engine =new Engine();

        var json = @"{
              ""CONTRATE"": 0,
              ""SALINC"": 0,
              ""RETAGE"": 55.34,
              ""MARSTATUS"": ""single"",
              ""SPOUSEDOB"": ""1970-01-01"",
              ""VIEWOPTION"": ""pension""
            }";

        var input = new JsonParser(engine).Parse(json);

        var result= engine
            .SetValue("input", input)
            .Execute("input.CONTRATE > 50 && input.SALINC < 50 && input.RETAGE > 50")
            .GetCompletionValue().AsBoolean();
Run Code Online (Sandbox Code Playgroud)

方法 2 - 使用 3rdParty Json 序列化器

Jint 接受 POCO 对象作为输入,因此我们可以首先将 json 转换为 POCO,然后将其提供给 Jint 以获得结果(在本例中,我使用 Json.net 作为反序列化器)

        var input = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
        var result= engine
            .SetValue("input", input)
            .Execute("input.CONTRATE > 50 && input.SALINC < 50 && input.RETAGE > 50")
            .GetCompletionValue().AsBoolean(); 
Run Code Online (Sandbox Code Playgroud)

方法 3 - 将 JSON 对象放入评估脚本中

或者正如 Mr.Ros(Jint 的作者)建议的那样,我们可以将 JSON 对象和条件放在同一个脚本中,并将其传递给 Jint 进行评估。

        var engine = new Engine();

        var js = @"
         input={
          ""CONTRATE"": 0,
          ""SALINC"": 0,
          ""RETAGE"": 55.34,
          ""MARSTATUS"": ""single"",
          ""SPOUSEDOB"": ""1970-01-01"",
          ""VIEWOPTION"": ""pension""
        };

        input.CONTRATE > 50 && input.SALINC < 50 && input.RETAGE > 50;";

        var result = engine
            .Execute(js)
            .GetCompletionValue().AsBoolean();
Run Code Online (Sandbox Code Playgroud)