diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java index ffbe0241..7506358a 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java @@ -801,7 +801,7 @@ public abstract class ValueNode { @Override public String toString() { - return path.toString(); + return existsCheck && ! shouldExist ? Utils.concat("!" , path.toString()) : path.toString(); } public ValueNode evaluate(Predicate.PredicateContext ctx) { diff --git a/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java b/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java index c568b63c..73542bef 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/FilterCompilerTest.java @@ -84,6 +84,15 @@ public class FilterCompilerTest { assertInvalidPathException("[?(!'foo')]"); } + @Test + // issue #178 + public void compile_and_serialize_not_exists_filter(){ + Filter compiled = compile("[?(!@.foo)]"); + String serialized = compiled.toString(); + assertThat(serialized).isEqualTo("[?(!@['foo'])]"); + } + + private void assertInvalidPathException(String filter){ try {