From fd2ac6c0bea5ef079ebdf60c1f0be8c1e0d55111 Mon Sep 17 00:00:00 2001 From: Kalle Stenflo Date: Sat, 21 Nov 2015 13:44:21 +0100 Subject: [PATCH] Fixed bug in IN operator evaluation. --- .../jsonpath/internal/filter/EvaluatorFactory.java | 12 +++++++++++- .../test/java/com/jayway/jsonpath/FilterTest.java | 10 ++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java index d8632fa1..817b8831 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/EvaluatorFactory.java @@ -145,7 +145,17 @@ public class EvaluatorFactory { private static class InEvaluator implements Evaluator { @Override public boolean evaluate(ValueNode left, ValueNode right, Predicate.PredicateContext ctx) { - ValueNode.ValueListNode valueListNode = right.asValueListNode(); + ValueNode.ValueListNode valueListNode; + if(right.isJsonNode()){ + ValueNode vn = right.asJsonNode().asValueListNode(ctx); + if(vn.isUndefinedNode()){ + return false; + } else { + valueListNode = vn.asValueListNode(); + } + } else { + valueListNode = right.asValueListNode(); + } return valueListNode.contains(left); } } diff --git a/json-path/src/test/java/com/jayway/jsonpath/FilterTest.java b/json-path/src/test/java/com/jayway/jsonpath/FilterTest.java index e4f2fb3d..dbfea025 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/FilterTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/FilterTest.java @@ -479,4 +479,14 @@ public class FilterTest extends BaseTest { criteria = Criteria.parse("@.foo"); assertThat(criteria.toString()).isEqualTo("@['foo']"); } + + + @Test + public void inline_in_criteria_evalueates() { + + Object read = JsonPath.read(JSON_DOCUMENT, "$.store.book[?(@.category in ['reference', 'fiction'])]"); + + System.out.println(read); + + } }