-
Notifications
You must be signed in to change notification settings - Fork 6
/
Program.cs
74 lines (60 loc) · 2.2 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using Jsonata.Net.Native;
using Jsonata.Net.Native.Json;
using System;
using System.Diagnostics;
namespace TestApp
{
internal sealed class Program
{
static void Main(string[] args)
{
JsonataQuery query = new JsonataQuery("$.a");
Console.WriteLine(query);
//from string
{
string result = query.Eval("{\"a\": \"b\"}");
Check(result, "\"b\"");
}
//from tokens
{
JToken data = JToken.Parse("{\"a\": \"b\"}");
JToken result = query.Eval(data);
Check(result, "\"b\"");
}
//with bindings
{
JToken data = JToken.Parse("{\"a\": \"b\"}");
JObject bindings = (JObject)JToken.Parse("{\"x\": \"y\"}");
JsonataQuery query2 = new JsonataQuery("{'a': $.a, 'x': $x}");
JToken result = query2.Eval(data, bindings);
Check(result, "{\"a\":\"b\",\"x\":\"y\"}");
}
//with custom environment and function binding
{
JToken data = JToken.Parse("{\"a\": \"b\"}");
JObject bindings = (JObject)JToken.Parse("{\"x\": \"y\"}");
EvaluationEnvironment env = new EvaluationEnvironment(bindings);
env.BindFunction(typeof(Program).GetMethod(nameof(foo)));
JsonataQuery query2 = new JsonataQuery("{'a': $.a, 'x': $x, 'z': $foo()}");
JToken result = query2.Eval(data, env);
Check(result, "{\"a\":\"b\",\"x\":\"y\",\"z\":\"bar\"}");
}
}
private static void Check(string value, string expected)
{
Console.WriteLine($"Expected: {expected}, got {value}");
if (expected != value)
{
throw new Exception("Check failed");
}
}
private static void Check(JToken value, string expected)
{
Check(value.ToFlatString(), expected);
}
public static string foo()
{
return "bar";
}
}
}