diff --git a/json-path/src/main/java/com/jayway/jsonpath/JsonModel.java b/json-path/src/main/java/com/jayway/jsonpath/JsonModel.java index 5981c760..a1444001 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/JsonModel.java +++ b/json-path/src/main/java/com/jayway/jsonpath/JsonModel.java @@ -154,13 +154,13 @@ public class JsonModel { public boolean hasPath(JsonPath jsonPath){ isTrue(jsonPath.isPathDefinite(), "hasPath can only be used for definite paths"); - + Object obj = null; try { - get(jsonPath); + obj = get(jsonPath); } catch(InvalidPathException e){ return false; } - return true; + return null == obj?false:true; } // -------------------------------------------------------- diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FieldFilter.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FieldFilter.java index 9c1e0678..e0a621bc 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FieldFilter.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/FieldFilter.java @@ -55,8 +55,8 @@ public class FieldFilter extends PathTokenFilter { } } else { Map map = jsonProvider.toMap(obj); - if(!map.containsKey(condition)){ - throw new InvalidPathException("invalid path"); + if(map == null || !map.containsKey(condition)){ + return null; } else { return map.get(condition); } diff --git a/json-path/src/test/java/com/jayway/jsonpath/JsonModelTest.java b/json-path/src/test/java/com/jayway/jsonpath/JsonModelTest.java index f811880a..cab597f0 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JsonModelTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JsonModelTest.java @@ -56,6 +56,9 @@ public class JsonModelTest { " }\n" + "}"; + public final static String INVALID_DOCUMENT = + "{?\\?\\?!!?~q`}}}}}\"\" \"store\": {\n"; + @Test public void a_model_can_be_pretty_printed() throws Exception { @@ -101,9 +104,14 @@ public class JsonModelTest { } + @Test(expected = InvalidJsonException.class) + public void invalid_json_throws() throws Exception { + JsonModel.model(INVALID_DOCUMENT).get("store.id"); + } + @Test(expected = InvalidPathException.class) public void invalid_path_throws() throws Exception { - JsonModel.model(DOCUMENT).get("store.invalid"); + JsonModel.model(DOCUMENT).get("a("); }