Skip to content

Commit e94af59

Browse files
committed
negative index
1 parent 505cba0 commit e94af59

3 files changed

Lines changed: 9 additions & 1 deletion

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ venv/
1717
.idea
1818
.venv
1919
tests/gen
20+
21+
.claude

src/jsonata/jsonata.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ def evaluate_filter(self, predicate: Optional[Any], input: Optional[Any], enviro
519519
if index < 0:
520520
# count in from end of array
521521
index = len(input) + index
522-
item = input[index] if index < len(input) else None
522+
item = input[index] if 0 <= index < len(input) else None
523523
if item is not None:
524524
if isinstance(item, list):
525525
results = item

tests/array_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33

44
class TestArray:
55

6+
def test_negative_index(self):
7+
expr = jsonata.Jsonata("item[-1]")
8+
assert expr.evaluate({"item": []}) is None
9+
expr = jsonata.Jsonata("$[-1]")
10+
assert expr.evaluate([]) is None
11+
612
def test_array(self):
713
assert jsonata.Jsonata("$.[{ }] ~> $reduce($append)").evaluate([True, True]) == [{}, {}]
814

0 commit comments

Comments
 (0)