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

如何使用JINT库从Javascript获取JSON值,javascript,c#,json,jint,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 &

我有一个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);
var输入={
“合同”:0,
“SALINC”:0,
“重修”:55.34,
“婚姻状况”:“单身”,
“喷动物”:“1970-01-01”,
“查看选项”:“养老金”
};
var inputValidation=“input.contate>50&&input.salic<50&&input.RETAGE>50”;
eval(输入验证);

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

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

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

Jint有内置的解析器来支持javascript的
JSON.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();
var引擎=新引擎();
var json=@”{
“合同”:0,
“salic”:0,
“重修”:55.34,
“MARSTATUS”:“single”,
“喷动物”:“1970-01-01”,
“查看选项”:“养老金”
}";
var输入=新的JsonParser(引擎).Parse(json);
var结果=发动机
.SetValue(“输入”,输入)
.Execute(“input.contate>50&&input.salic<50&&input.RETAGE>50”)
.GetCompletionValue().AsBoolean();
方法2-使用第三方Json序列化程序

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

var input=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
var结果=发动机
.SetValue(“输入”,输入)
.Execute(“input.contate>50&&input.salic<50&&input.RETAGE>50”)
.GetCompletionValue().AsBoolean();
方法3-将JSON对象放入评估脚本中

或者正如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();
var引擎=新引擎();
var js=@”
输入={
“合同”:0,
“salic”:0,
“重修”:55.34,
“MARSTATUS”:“single”,
“喷动物”:“1970-01-01”,
“查看选项”:“养老金”
};
input.contate>50&&input.salic<50&&input.RETAGE>50;”;
var结果=发动机
.Execute(js)
.GetCompletionValue().AsBoolean();

您还可以使用条件将JSON对象直接粘贴到脚本中。它将作为脚本中的对象进行计算。或者,如果它是作为字符串传递的,则使用
JSON.parse
,而不是从C#执行。
        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();