diff --git a/src/main/java/com/dashjoin/jsonata/Functions.java b/src/main/java/com/dashjoin/jsonata/Functions.java index 17fb147..db6c605 100644 --- a/src/main/java/com/dashjoin/jsonata/Functions.java +++ b/src/main/java/com/dashjoin/jsonata/Functions.java @@ -225,13 +225,13 @@ static void string(StringBuilder b, Object arg, boolean prettify, String indent) b.append('{'); if (prettify) b.append('\n'); - for (Entry e : ((Map) arg).entrySet()) { + for (Entry e : ((Map) arg).entrySet()) { if (prettify) { b.append(indent); b.append(" "); } b.append('"'); - Utils.quote(e.getKey(), b); + Utils.quote(e.getKey().toString(), b); b.append('"'); b.append(':'); if (prettify) diff --git a/src/main/java/com/dashjoin/jsonata/Jsonata.java b/src/main/java/com/dashjoin/jsonata/Jsonata.java index 5cc6a7e..e076b8d 100644 --- a/src/main/java/com/dashjoin/jsonata/Jsonata.java +++ b/src/main/java/com/dashjoin/jsonata/Jsonata.java @@ -1535,6 +1535,13 @@ static Symbol chainAST() { List args = new ArrayList<>(); args.add(lhs); args.add(func); // == [lhs, func] result = /* await */ apply(chain, args, null, environment); } else { + if (lhs instanceof List && "partial".equals(expr.rhs.type)) { + var tempLhs = (List)lhs; + lhs = new HashMap(); + for (int i = 0; i < tempLhs.size(); i++) { + ((HashMap) lhs).put(i, tempLhs.get(i)); + } + } List args = new ArrayList<>(); args.add(lhs); // == [lhs] result = /* await */ apply(func, args, null, environment); } @@ -1755,7 +1762,7 @@ Jsonata getPerThreadInstance() { List _res = new ArrayList<>(); for (String s : (List)validatedArgs) { //System.err.println("PAT "+proc+" input "+s); - if (((Pattern)proc).matcher(s).find()) { + if (s != null && ((Pattern)proc).matcher(s).find()) { //System.err.println("MATCH"); _res.add(s); } @@ -1821,7 +1828,7 @@ Object evaluateLambda(Symbol expr, Object input, Frame environment) { var evaluatedArgs = new ArrayList<>(); for(var ii = 0; ii < expr.arguments.size(); ii++) { var arg = expr.arguments.get(ii); - if (arg.type.equals("operator") && (arg.value.equals("?"))) { + if (arg.type.equals("operator") && (arg.value.toString().equals("?"))) { evaluatedArgs.add(arg); } else { evaluatedArgs.add(/* await */ evaluate(arg, input, environment)); @@ -1910,7 +1917,7 @@ Object partialApplyProcedure(Symbol proc, List args) { for (var param : proc.arguments) { // proc.arguments.forEach(Object (param, index) { Object arg = index $each(?, function($v) { $v })"); + Object evaluate = expression.evaluate("{}"); + Assertions.assertNull(evaluate); + } + + @Test + public void testEachArrayWithData() { + var expression = Jsonata.jsonata("[123, 321] ~> $each(?, function($v) { $v })"); + Object evaluate = expression.evaluate("{}"); + Assertions.assertInstanceOf(List.class, evaluate); + List expected = List.of(123, 321); + Assertions.assertEquals(expected, evaluate); + } }