From 42c8c7e88e4c172e55b386b27dbb82d00ae4016a Mon Sep 17 00:00:00 2001 From: Andreas Eberhart Date: Fri, 5 Dec 2025 12:18:30 +0100 Subject: [PATCH] negative index #77 happened generally when the index is less than (-size) - i.e. counting in to the array still yields a negative index --- src/main/java/com/dashjoin/jsonata/Jsonata.java | 2 +- src/test/java/com/dashjoin/jsonata/ArrayTest.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dashjoin/jsonata/Jsonata.java b/src/main/java/com/dashjoin/jsonata/Jsonata.java index 7a78177..5cc6a7e 100644 --- a/src/main/java/com/dashjoin/jsonata/Jsonata.java +++ b/src/main/java/com/dashjoin/jsonata/Jsonata.java @@ -500,7 +500,7 @@ Frame createFrameFromTuple(Frame environment, Map tuple) { // count in from end of array index = ((List)input).size() + index; } - var item = index<((List)input).size() ? ((List)input).get(index) : null; + var item = 0<=index && index<((List)input).size() ? ((List)input).get(index) : null; if(item != null) { if(item instanceof List) { results = (List)item; diff --git a/src/test/java/com/dashjoin/jsonata/ArrayTest.java b/src/test/java/com/dashjoin/jsonata/ArrayTest.java index 660256c..66739af 100644 --- a/src/test/java/com/dashjoin/jsonata/ArrayTest.java +++ b/src/test/java/com/dashjoin/jsonata/ArrayTest.java @@ -13,6 +13,14 @@ public class ArrayTest { + @Test + public void testNegativeIndex() { + Jsonata expr = jsonata("item[-1]"); + Assertions.assertNull(expr.evaluate(Map.of("item", List.of()))); + expr = jsonata("$[-1]"); + Assertions.assertNull(expr.evaluate(List.of())); + } + @Test public void testArray() { Jsonata expr1 = jsonata("{'key': $append($.[{'x': 'y'}],$.[{'a': 'b'}])}");