1

私はこの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値を取得するには?

4

1 に答える 1

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 - サードパーティの 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();
于 2015-06-05T06:25:27.857 に答える