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

时间:2015-04-09 14:38:53

标签: 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);

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

1 个答案:

答案 0 :(得分:3)

我相信我们可以通过3种方式取得理想的结果

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

Jint有内置的解析器来支持javascript的JSON.parseJSON.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();