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 值?
我相信我们可以通过三种方式达到预期的结果
方法 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)