From 1253f4aa214dd938fdf870e68d7852b2164cb908 Mon Sep 17 00:00:00 2001 From: Jochen Berger Date: Mon, 13 May 2013 13:07:51 +0200 Subject: [PATCH] make NE and IS filters work on multi-level paths --- .../java/com/jayway/jsonpath/Criteria.java | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/Criteria.java b/json-path/src/main/java/com/jayway/jsonpath/Criteria.java index 49cbb392..222c9dfa 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/Criteria.java +++ b/json-path/src/main/java/com/jayway/jsonpath/Criteria.java @@ -185,14 +185,21 @@ public class Criteria { }); } else if (CriteriaType.NE.equals(key)) { - if (expectedVal == null && actualVal == null) { - return false; - } - if (expectedVal == null) { - return true; - } else { - return !expectedVal.equals(actualVal); - } + + return objectOrAnyCollectionItemMatches(actualVal, new Predicate() { + + @Override + public boolean accept(Object value) { + if (expectedVal == null && value == null) { + return false; + } + if (expectedVal == null) { + return true; + } else { + return !expectedVal.equals(value); + } + } + }); } else if (CriteriaType.IN.equals(key)) { @@ -287,12 +294,17 @@ public class Criteria { return true; } else { Object actualVal = readSafely(this.key, map); - - if (isValue == null) { - return actualVal == null; - } else { - return isValue.equals(actualVal); - } + return objectOrAnyCollectionItemMatches(actualVal, new Predicate() { + @Override + public boolean accept(Object value) { + if (isValue == null) { + return value == null; + } else { + return isValue.equals(value); + } + } + + }); } } else {