我有这个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);
如何使用JINT作为JSON对象字符串获取“input”变量的JSON值?
答案 0 :(得分:3)
我相信我们可以通过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();
方法2 - 使用3rdParty Json Serializer
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();
方法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();