【问题标题】:How to get JSON value from Javascript using JINT library如何使用 JINT 库从 Javascript 获取 JSON 值
【发布时间】:2015-04-09 14:38:52
【问题描述】:

我有这个 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 对象字符串获取“输入”变量的 JSON 值?

【问题讨论】:

    标签: javascript c# json jint


    【解决方案1】:

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

    方法一 - 使用 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 序列化器

    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();
    

    【讨论】:

    • 您也可以将JSON对象直接粘贴到带有条件的脚本中。它将被评估为脚本内的对象。或者,如果它作为字符串传递,请使用 JSON.parse 而不是从 C# 中进行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2018-11-07
    相关资源
    最近更新 更多