簡體   English   中英

如何使用JINT庫從Javascript獲取JSON值

[英]How to get JSON value from Javascript using JINT library

我有這個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值?

我相信我們可以通過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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM