Examples
Examples in Examples.json file below demonstrate comparison operators described in Comparison Operators
Note
The following JSON files are referenced in JsonQL expressions in Examples.json in example below:
{
"Operator_==": {
"Comment_Operator_==_1": "(15 == invalid.path) is evaluated to false",
"Operator_==_1": "$value((15 == invalid.path) == false)",
"Comment_Operator_==_2": "(e.SalaryInvalid == 100000) is evaluated to false for all employees",
"Operator_==_2": "$value(Count(Companies.Select(c => c.Employees.Where(e => e.SalaryInvalid == 100000))) == 0)",
"Operator_==_3": "$value(15 == Int1)",
"Operator_==_4": "$value((15 == '15') == false)",
"Operator_==_5": "$value(15.00 == Int1)",
"Operator_==_6": "$value((15.01 == Int1) == false)",
"Operator_==_7": "$value(TrueValue == true)",
"Operator_==_8": "$value((TrueValue == 'true') == false)",
"Operator_==_9": "$value(FalseValue == false)",
"Operator_==_10": "$value((FalseValue == 'false') == false)",
"Operator_==_11": "$value(ToDate('2022-05-23') == ToDate('2022-05-23T18:25:43.511Z'))",
"Operator_==_12": "$value((ToDate('2022-05-23') == ToDate('2022-06-23T18:25:43.511Z')) == false)",
"Operator_==_13": "$value(Text1 == 'Text1')",
"Operator_==_14": "$value(Text1 == 'TExt1' == false)"
},
"Operator_!=": {
"Comment_Operator_!=_1": "(15 != invalid.path) is evaluated to true",
"Operator_!=_1": "$value((15 != invalid.path) == true)",
"Comment_Operator_!=_2": "(e.SalaryInvalid != 100000) is evaluated to true for all employees",
"Operator_!=_2": "$value(Count(Companies.Select(c => c.Employees.Where(e => e.SalaryInvalid != 100000))) > 0)",
"Operator_!=_3": "$value((15 != Int1) == false)",
"Operator_!=_4": "$value((15 != '15') == true)",
"Operator_!=_5": "$value((15.00 != Int1) == false)",
"Operator_!=_6": "$value(15.01 != Int1)",
"Operator_!=_7": "$value(TrueValue != true == false)",
"Operator_!=_8": "$value((TrueValue != 'true'))",
"Operator_!=_9": "$value((FalseValue != false) == false)",
"Operator_!=_10": "$value(FalseValue != 'false')",
"Operator_!=_11": "$value((ToDate('2022-05-23') != ToDate('2022-05-23T18:25:43.511Z')) == false)",
"Operator_!=_12": "$value(ToDate('2022-05-23') != ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_!=_13": "$value(Text1 != 'TExt1')",
"Operator_!=_14": "$value(Text1 !='Text1' == false)"
},
"Operator_<": {
"Comment_Operator_<_1": "(15 < invalid.path) is evaluated to undefined",
"Operator_<_1": "$value((15 < invalid.path) is undefined)",
"Comment_Operator_<_2": "(e.SalaryInvalid < 100000) is evaluated to undefined for all employees",
"Operator_<_2": "$value(Count(Companies.Select(c => c.Employees.Where(e => e.SalaryInvalid < 100000))) == 0)",
"Operator_<_3": "$value(Int1 < 16)",
"Operator_<_4": "$value((Int1 < 15) == false)",
"Operator_<_5": "$value(Int1 < 16.00)",
"Operator_<_6": "$value((Int1 < 14.9) == false)",
"Operator_<_7": "$value(Double1 < 16)",
"Operator_<_8": "$value((Double2 < Double1) == false)",
"Operator_<_9": "$value(ToDate('2022-05-23T18:25:43.511Z') < ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_<_10": "$value(ToDate('2022-06-23T18:25:43.511Z') < ToDate('2022-05-23T18:25:43.511Z') == false)",
"Operator_<_11": "$value(ToDateTime('2022-05-23T18:25:43.511Z') < ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_<_12": "$value(ToDateTime('2022-06-23T18:25:43.511Z') < ToDateTime('2022-05-23T18:25:43.511Z') == false)",
"Operator_<_13": "$value(ToDate('2022-06-23T18:25:43.511Z') < ToDateTime('2022-06-23T18:25:43.511Z'))",
"Operator_<_14": "$value(ToDateTime('2022-05-23T18:25:43.511Z') < ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_<_15": "$value(Text1 < 'Text2')",
"Operator_<_16": "$value(Text1 < 'Text0' == false)"
},
"Operator_<=": {
"Comment_Operator_<=_1": "(15 <= invalid.path) is evaluated to undefined",
"Operator_<=_1": "$value((15 <= invalid.path) is undefined)",
"Comment_Operator_<=_2": "(e.SalaryInvalid <= 100000) is evaluated to undefined for all employees",
"Operator_<=_2": "$value(Count(Companies.Select(c => c.Employees.Where(e => e.SalaryInvalid <= 100000))) == 0)",
"Operator_<=_3": "$value(Int1 <= 15)",
"Operator_<=_4": "$value(Int1 <= 16)",
"Operator_<=_5": "$value((Int1 <= 14) == false)",
"Operator_<=_6": "$value(Int1 <= 15.00)",
"Operator_<=_7": "$value(Int1 <= 16.00)",
"Operator_<=_8": "$value((Int1 <= 14.9) == false)",
"Operator_<=_9": "$value(Double1 <= 15.25)",
"Operator_<=_10": "$value(Double1 <= 15.26)",
"Operator_<=_11": "$value((Double1 <= 15.24) == false)",
"Operator_<=_12": "$value(ToDate('2022-05-23T18:25:43.511Z') <= ToDate('2022-05-23T18:25:43.511Z'))",
"Operator_<=_13": "$value(ToDate('2022-05-23T18:25:43.511Z') <= ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_<=_14": "$value(ToDate('2022-06-23T18:25:43.511Z') <= ToDate('2022-05-23T18:25:43.511Z') == false)",
"Operator_<=_15": "$value(ToDateTime('2022-05-23T18:25:43.511Z') <= ToDateTime('2022-05-23T18:25:43.511Z'))",
"Operator_<=_16": "$value(ToDateTime('2022-05-23T18:25:43.511Z') <= ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_<=_17": "$value(ToDateTime('2022-06-23T18:25:43.511Z') <= ToDateTime('2022-05-23T18:25:43.511Z') == false)",
"Operator_<=_18": "$value(ToDate('2022-06-23T18:25:43.511Z') <= ToDateTime('2022-06-23T18:25:43.511Z'))",
"Operator_<=_19": "$value(ToDateTime('2022-05-23T18:25:43.511Z') <= ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_<=_20": "$value(Text1 <= 'Text1')",
"Operator_<=_21": "$value(Text1 <= 'Text2')",
"Operator_<=_22": "$value(Text1 <= 'Text0' == false)"
},
"Operator_>": {
"Comment_Operator_>_1": "(15 > invalid.path) is evaluated to undefined",
"Operator_>_1": "$value((15 > invalid.path) is undefined)",
"Comment_Operator_>_2": "(e.SalaryInvalid > 100000) is evaluated to undefined for all employees",
"Operator_>_2": "$value(Count(Companies.Select(c => c.Employees.Where(e => e.SalaryInvalid > 100000))) == 0)",
"Operator_>_3": "$value(Int1 > 14)",
"Operator_>_4": "$value((Int1 > 15) == false)",
"Operator_>_5": "$value(Int1 > 14.00)",
"Operator_>_6": "$value((Int1 > 15.1) == false)",
"Operator_>_7": "$value(Double1 > 15.20)",
"Operator_>_8": "$value((Double1 > Double2) == false)",
"Operator_>_9": "$value(ToDate('2022-06-23T18:25:43.511Z') > ToDate('2022-05-23T18:25:43.511Z'))",
"Operator_>_10": "$value(ToDate('2022-06-23T18:25:43.511Z') > ToDate('2022-07-23T18:25:43.511Z') == false)",
"Operator_>_11": "$value(ToDateTime('2022-06-23T18:25:43.511Z') > ToDate('2022-05-23T18:25:43.511Z'))",
"Operator_>_12": "$value(ToDateTime('2022-05-23T18:25:43.511Z') > ToDateTime('2022-06-23T18:25:43.511Z') == false)",
"Operator_>_13": "$value(ToDate('2022-06-23T18:25:43.511Z') > ToDateTime('2022-05-23T18:25:43.511Z'))",
"Operator_>_14": "$value(ToDateTime('2022-06-23T18:25:43.511Z') > ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_>_15": "$value(Text1 > 'Text0')",
"Operator_>_16": "$value(Text1 > 'Text2' == false)"
},
"Operator_>=": {
"Comment_Operator_>=_1": "(15 >= invalid.path) is evaluated to undefined",
"Operator_>=_1": "$value((15 >= invalid.path) is undefined)",
"Comment_Operator_<=_2": "(e.SalaryInvalid >= 100000) is evaluated to undefined for all employees",
"Operator_>=_2": "$value(Count(Companies.Select(c => c.Employees.Where(e => e.SalaryInvalid >= 100000))) == 0)",
"Operator_>=_3": "$value(Int1 >= 15)",
"Operator_>=_4": "$value(Int1 >= 14)",
"Operator_>=_5": "$value((Int1 >= 16) == false)",
"Operator_>=_6": "$value(Int1 >= 15.00)",
"Operator_>=_7": "$value(Int1 >= 14.00)",
"Operator_>=_8": "$value((Int1 >= 15.1) == false)",
"Operator_>=_9": "$value(Double1 >= 15.25)",
"Operator_>=_10": "$value(Double1 >= 15.24)",
"Operator_>=_11": "$value((Double1 >= 15.26) == false)",
"Operator_>=_12": "$value(ToDate('2022-05-23T18:25:43.511Z') >= ToDate('2022-05-23T18:25:43.511Z'))",
"Operator_>=_13": "$value(ToDate('2022-06-23T18:25:43.511Z') >= ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_>=_14": "$value(ToDate('2022-05-23T18:25:43.511Z') >= ToDate('2022-06-23T18:25:43.511Z') == false)",
"Operator_>=_15": "$value(ToDateTime('2022-05-23T18:25:43.511Z') >= ToDateTime('2022-05-23T18:25:43.511Z'))",
"Operator_>=_16": "$value(ToDateTime('2022-06-23T18:25:43.511Z') >= ToDate('2022-05-23T18:25:43.511Z'))",
"Operator_>=_17": "$value(ToDateTime('2022-05-23T18:25:43.511Z') >= ToDateTime('2022-06-23T18:25:43.511Z') == false)",
"Operator_>=_18": "$value(ToDate('2022-06-23T18:25:43.511Z') >= ToDateTime('2022-05-23T18:25:43.511Z'))",
"Operator_>=_19": "$value(ToDateTime('2022-06-23T18:25:43.511Z') >= ToDate('2022-06-23T18:25:43.511Z'))",
"Operator_>=_20": "$value(Text1 >= 'Text1')",
"Operator_>=_21": "$value(Text1 >= 'Text0')",
"Operator_>=_22": "$value(Text1 >= 'Text2' == false)"
}
}
The result (i.e., an instance of JsonQL.Compilation.ICompilationResult) is serialized to a Result.json file below.
Note
For brevity, the serialized result includes only serialized evaluated Examples.json and does not include parent JSON files in JsonQL.Compilation.ICompilationResult.CompiledJsonFiles
Click to expand the result in instance of JsonQL.Compilation.ICompilationResult serialized into Result.json
{
"CompiledJsonFiles":[
{
"TextIdentifier": "Examples",
"CompiledParsedValue":
{
"Operator_==": {
"Comment_Operator_==_1": "(15 == invalid.path) is evaluated to false",
"Operator_==_1": true,
"Comment_Operator_==_2": "(e.SalaryInvalid == 100000) is evaluated to false for all employees",
"Operator_==_2": true,
"Operator_==_3": true,
"Operator_==_4": true,
"Operator_==_5": true,
"Operator_==_6": true,
"Operator_==_7": true,
"Operator_==_8": true,
"Operator_==_9": true,
"Operator_==_10": true,
"Operator_==_11": true,
"Operator_==_12": true,
"Operator_==_13": true,
"Operator_==_14": true
},
"Operator_!=": {
"Comment_Operator_!=_1": "(15 != invalid.path) is evaluated to true",
"Operator_!=_1": true,
"Comment_Operator_!=_2": "(e.SalaryInvalid != 100000) is evaluated to true for all employees",
"Operator_!=_2": true,
"Operator_!=_3": true,
"Operator_!=_4": true,
"Operator_!=_5": true,
"Operator_!=_6": true,
"Operator_!=_7": true,
"Operator_!=_8": true,
"Operator_!=_9": true,
"Operator_!=_10": true,
"Operator_!=_11": true,
"Operator_!=_12": true,
"Operator_!=_13": true,
"Operator_!=_14": true
},
"Operator_<": {
"Comment_Operator_<_1": "(15 < invalid.path) is evaluated to undefined",
"Operator_<_1": true,
"Comment_Operator_<_2": "(e.SalaryInvalid < 100000) is evaluated to undefined for all employees",
"Operator_<_2": true,
"Operator_<_3": true,
"Operator_<_4": true,
"Operator_<_5": true,
"Operator_<_6": true,
"Operator_<_7": true,
"Operator_<_8": true,
"Operator_<_9": true,
"Operator_<_10": true,
"Operator_<_11": true,
"Operator_<_12": true,
"Operator_<_13": true,
"Operator_<_14": true,
"Operator_<_15": true,
"Operator_<_16": true
},
"Operator_<=": {
"Comment_Operator_<=_1": "(15 <= invalid.path) is evaluated to undefined",
"Operator_<=_1": true,
"Comment_Operator_<=_2": "(e.SalaryInvalid <= 100000) is evaluated to undefined for all employees",
"Operator_<=_2": true,
"Operator_<=_3": true,
"Operator_<=_4": true,
"Operator_<=_5": true,
"Operator_<=_6": true,
"Operator_<=_7": true,
"Operator_<=_8": true,
"Operator_<=_9": true,
"Operator_<=_10": true,
"Operator_<=_11": true,
"Operator_<=_12": true,
"Operator_<=_13": true,
"Operator_<=_14": true,
"Operator_<=_15": true,
"Operator_<=_16": true,
"Operator_<=_17": true,
"Operator_<=_18": true,
"Operator_<=_19": true,
"Operator_<=_20": true,
"Operator_<=_21": true,
"Operator_<=_22": true
},
"Operator_>": {
"Comment_Operator_>_1": "(15 > invalid.path) is evaluated to undefined",
"Operator_>_1": true,
"Comment_Operator_>_2": "(e.SalaryInvalid > 100000) is evaluated to undefined for all employees",
"Operator_>_2": true,
"Operator_>_3": true,
"Operator_>_4": true,
"Operator_>_5": true,
"Operator_>_6": true,
"Operator_>_7": true,
"Operator_>_8": true,
"Operator_>_9": true,
"Operator_>_10": true,
"Operator_>_11": true,
"Operator_>_12": true,
"Operator_>_13": true,
"Operator_>_14": true,
"Operator_>_15": true,
"Operator_>_16": true
},
"Operator_>=": {
"Comment_Operator_>=_1": "(15 >= invalid.path) is evaluated to undefined",
"Operator_>=_1": true,
"Comment_Operator_<=_2": "(e.SalaryInvalid >= 100000) is evaluated to undefined for all employees",
"Operator_>=_2": true,
"Operator_>=_3": true,
"Operator_>=_4": true,
"Operator_>=_5": true,
"Operator_>=_6": true,
"Operator_>=_7": true,
"Operator_>=_8": true,
"Operator_>=_9": true,
"Operator_>=_10": true,
"Operator_>=_11": true,
"Operator_>=_12": true,
"Operator_>=_13": true,
"Operator_>=_14": true,
"Operator_>=_15": true,
"Operator_>=_16": true,
"Operator_>=_17": true,
"Operator_>=_18": true,
"Operator_>=_19": true,
"Operator_>=_20": true,
"Operator_>=_21": true,
"Operator_>=_22": true
}
}
}
],
"CompilationErrors":
{
"$type": "System.Collections.Generic.List`1[[JsonQL.Compilation.ICompilationErrorItem, JsonQL]], System.Private.CoreLib",
"$values": []
}
}
The code snippet shows how the JSON file Examples.json was parsed using JsonQL.Compilation.IJsonCompiler
// Set the value of jsonCompiler to an instance of JsonQL.Compilation.IJsonCompiler here.
// The value of JsonQL.Compilation.JsonCompiler is normally created by Dependency Injection container
// and it is normally configured as a singleton.
JsonQL.Compilation.IJsonCompiler jsonCompiler = null!;
var sharedExamplesFolderPath = new []
{
"DocFiles", "MutatingJsonFiles", "Examples"
};
var dataJsonTextData = new JsonTextData("Data", this.LoadExampleJsonFile("Data.json"));
var companiesJsonTextData = new JsonTextData("Companies",
LoadJsonFileHelpers.LoadJsonFile("Companies.json", sharedExamplesFolderPath), dataJsonTextData);
var result = jsonCompiler.Compile(new JsonTextData("Examples",
this.LoadExampleJsonFile("Examples.json"), companiesJsonTextData));