Skip to content

Commit fd2ac6c

Browse files
committed
Fixed bug in IN operator evaluation.
1 parent 086812c commit fd2ac6c

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,17 @@ public boolean evaluate(ValueNode left, ValueNode right, Predicate.PredicateCont
145145
private static class InEvaluator implements Evaluator {
146146
@Override
147147
public boolean evaluate(ValueNode left, ValueNode right, Predicate.PredicateContext ctx) {
148-
ValueNode.ValueListNode valueListNode = right.asValueListNode();
148+
ValueNode.ValueListNode valueListNode;
149+
if(right.isJsonNode()){
150+
ValueNode vn = right.asJsonNode().asValueListNode(ctx);
151+
if(vn.isUndefinedNode()){
152+
return false;
153+
} else {
154+
valueListNode = vn.asValueListNode();
155+
}
156+
} else {
157+
valueListNode = right.asValueListNode();
158+
}
149159
return valueListNode.contains(left);
150160
}
151161
}

json-path/src/test/java/com/jayway/jsonpath/FilterTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,4 +479,14 @@ public void criteria_can_be_parsed() {
479479
criteria = Criteria.parse("@.foo");
480480
assertThat(criteria.toString()).isEqualTo("@['foo']");
481481
}
482+
483+
484+
@Test
485+
public void inline_in_criteria_evalueates() {
486+
487+
Object read = JsonPath.read(JSON_DOCUMENT, "$.store.book[?(@.category in ['reference', 'fiction'])]");
488+
489+
System.out.println(read);
490+
491+
}
482492
}

0 commit comments

Comments
 (0)