Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion JUST.net/JsonTransformer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,6 @@ private void LoopOperation(string propertyName, string arguments, State state, r
if (args.Length > 2)
{
previousAlias = (string)ParseFunction(args[2].Trim(), state);
state.CurrentArrayToken.Add(new LevelKey() { Key = previousAlias, Level = _levelCounter }, Context.Input);
}
else if (state.CurrentArrayToken.Any(t => t.Key.Key == alias))
{
Expand Down
24 changes: 23 additions & 1 deletion UnitTests/Arrays/LoopingTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,17 @@ public void SingleIndexReference()
}

[Test]
public void LoopingAlias()
public void SingleLoopingAlias()
{
const string transformer = "{ \"hello\": { \"#loop($.NestedLoop.Organization.Employee, employee, root)\": { \"Name\": \"#currentvalueatpath($.Name)\", \"NameExplicit\": \"#currentvalueatpath($.Name, employee)\" } } }";

var result = new JsonTransformer(new JUSTContext() { EvaluationMode = EvaluationMode.Strict }).Transform(transformer, ExampleInputs.NestedArrays);

Assert.AreEqual("{\"hello\":[{\"Name\":\"E2\",\"NameExplicit\":\"E2\"},{\"Name\":\"E1\",\"NameExplicit\":\"E1\"}]}", result);
}

[Test]
public void MultipleLoopingAlias()
{
const string transformer = "{ \"hello\": { \"#loop($.NestedLoop.Organization.Employee, employee)\": { \"Details\": { \"#loop($.Details, details)\": { \"CurrentCountry\": \"#currentvalueatpath($.Country, details)\", \"OuterName\": \"#currentvalueatpath($.Name, employee)\", \"FirstLevel\": { \"#loop($.Roles, roles)\": { \"Employee\": \"#currentvalue(employee)\", \"Job\": \"#currentvalueatpath($.Job, roles)\" } } } } } } }";

Expand All @@ -267,6 +277,18 @@ public void MixedLoopingAlias()
Assert.AreEqual("{\"hello\":[{\"Details\":[{\"CurrentCountry\":\"Iceland\",\"OuterName\":\"E2\"}]},{\"Details\":[{\"CurrentCountry\":\"Denmark\",\"OuterName\":\"E1\"}]}]}", result);
}

[Test]
public void NestedLoopingAlias()
{
const string transformer = "{ \"payload\": { \"produce-color\": { \"green\": { \"#loop($..fruit[?(@.color == 'green')], outside-loop)\": { \"name\": \"#currentvalueatpath($.name)\", \"outer-index\": \"#currentindex()\", \"other\": { \"#loop($..vegetables[?(@.color == 'green')],inner-loop,root)\": { \"name\": \"#currentvalueatpath($.name)\", \"inner-index\": \"#currentindex()\" } }, \"addionalInformation\": { \"outside-name\": \"#currentvalueatpath($.name)\" } } } } }}";
const string input = "{ \"root\": { \"type\": \"produce\", \"vegetables\": [ { \"name\": \"tomato\", \"color\": \"red\" }, { \"name\": \"cucumber\", \"color\": \"green\" }, { \"name\": \"bell-pepper\", \"color\": \"yellow\" }, { \"name\": \"colored-greens\", \"color\": \"green\" } ], \"fruit\": [ { \"name\": \"banana\", \"color\": \"yellow\" }, { \"name\": \"melon\", \"color\": \"green\" }, { \"name\": \"orange\", \"color\": \"orange\" }, { \"name\": \"apple\", \"color\": \"green\" }, { \"name\": \"pear\", \"color\": \"green\" } ] }}";

var context = new JUSTContext() { EvaluationMode = EvaluationMode.Strict };
var result = new JsonTransformer(context).Transform(transformer, input);

Assert.AreEqual("{\"payload\":{\"produce-color\":{\"green\":[{\"name\":\"melon\",\"outer-index\":0,\"other\":[{\"name\":\"cucumber\",\"inner-index\":0},{\"name\":\"colored-greens\",\"inner-index\":1}],\"addionalInformation\":{\"outside-name\":\"melon\"}},{\"name\":\"apple\",\"outer-index\":1,\"other\":[{\"name\":\"cucumber\",\"inner-index\":0},{\"name\":\"colored-greens\",\"inner-index\":1}],\"addionalInformation\":{\"outside-name\":\"apple\"}},{\"name\":\"pear\",\"outer-index\":2,\"other\":[{\"name\":\"cucumber\",\"inner-index\":0},{\"name\":\"colored-greens\",\"inner-index\":1}],\"addionalInformation\":{\"outside-name\":\"pear\"}}]}}}", result);
}

[Test]
public void BulkFunctions()
{
Expand Down