diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayIndexFilter.java b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayIndexFilter.java index 4df7057b..0319d21f 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayIndexFilter.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/filter/ArrayIndexFilter.java @@ -14,6 +14,7 @@ */ package com.jayway.jsonpath.internal.filter; +import com.jayway.jsonpath.PathNotFoundException; import com.jayway.jsonpath.spi.JsonProvider; import java.util.regex.Pattern; @@ -95,8 +96,8 @@ public class ArrayIndexFilter extends PathTokenFilter { } else { String[] indexArr = COMMA.split(trimmedCondition); - if(jsonProvider.length(obj) == 0){ - return result; + if(obj == null || jsonProvider.length(obj) == 0){ + throw new PathNotFoundException("Failed to access array index: '" + condition + "' since the array is null or empty"); } if (indexArr.length == 1) { 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 4d57e325..4fa3b4bd 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 @@ -89,7 +89,7 @@ public class FieldFilter extends PathTokenFilter { } } } else { - throw new PathNotFoundException("Failed to access property: " + condition + " on object " + obj); + throw new PathNotFoundException("Failed to access property: '" + condition + "' on object " + obj); } } diff --git a/json-path/src/test/java/com/jayway/jsonpath/DocumentationPageTests.java b/json-path/src/test/java/com/jayway/jsonpath/DocumentationPageTests.java new file mode 100644 index 00000000..dcdc5ad2 --- /dev/null +++ b/json-path/src/test/java/com/jayway/jsonpath/DocumentationPageTests.java @@ -0,0 +1,88 @@ +package com.jayway.jsonpath; + +import org.junit.Test; + +/** + * User: kalle + * Date: 8/23/13 + * Time: 10:58 AM + */ +public class DocumentationPageTests { + + + public static final String JSON = "{ \n" + + " \"store\": {\n" + + " \"book\": [ \n" + + " { \n" + + " \"category\": \"reference\",\n" + + " \"author\": \"Nigel Rees\",\n" + + " \"title\": \"Sayings of the Century\",\n" + + " \"price\": 8.95\n" + + " },\n" + + " { \n" + + " \"category\": \"fiction\",\n" + + " \"author\": \"Evelyn Waugh\",\n" + + " \"title\": \"Sword of Honour\",\n" + + " \"price\": 12.99\n" + + " },\n" + + " { \n" + + " \"category\": \"fiction\",\n" + + " \"author\": \"Herman Melville\",\n" + + " \"title\": \"Moby Dick\",\n" + + " \"isbn\": \"0-553-21311-3\",\n" + + " \"price\": 8.99\n" + + " },\n" + + " { \n" + + " \"category\": null,\n" + + " \"author\": \"J. R. R. Tolkien\",\n" + + " \"title\": \"The Lord of the Rings\",\n" + + " \"isbn\": \"0-395-19395-8\",\n" + + " \"price\": 22.99,\n" + + " \"edition\": {\n" + + " \"release-date\": \"2013-01-22\"\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"bicycle\": {\n" + + " \"color\": \"red\",\n" + + " \"price\": 19.95\n" + + " }\n" + + " }\n" + + "}"; + + @Test + public void test_1() { + System.out.println(JsonPath.read(JSON, "$.store.bicycle")); + } + + @Test + public void test_2() { + System.out.println(JsonPath.read(JSON, "$.store.book[0]")); + } + + @Test + public void test_3() { + System.out.println(JsonPath.read(JSON, "$.store.book[*].author")); + } + + @Test + public void test_4() { + System.out.println(JsonPath.read(JSON, "$.store.book[-2:].author")); + } + + @Test + public void test_5() { + System.out.println(JsonPath.read(JSON, "$.store.book[1:3].author")); + } + + @Test + public void test_6() { + System.out.println(JsonPath.read(JSON, "$.store.book[0]['author', 'category']")); + } + + @Test + public void test_7() { + System.out.println(JsonPath.read(JSON, "$..price")); + } + +} diff --git a/json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java b/json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java index 4fde20ce..341d7965 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java @@ -78,7 +78,33 @@ public class JsonPathTest { private final static String ARRAY_EXPAND = "[{\"parent\": \"ONE\", \"child\": {\"name\": \"NAME_ONE\"}}, [{\"parent\": \"TWO\", \"child\": {\"name\": \"NAME_TWO\"}}]]"; + @Test + public void null_object_in_path() { + + String json = "{\n" + + " \"success\": true,\n" + + " \"data\": {\n" + + " \"user\": 3,\n" + + " \"own\": null,\n" + + " \"passes\": null,\n" + + " \"completed\": null\n" + + " },\n" + + " \"data2\": {\n" + + " \"user\": 3,\n" + + " \"own\": null,\n" + + " \"passes\": [{\"id\":\"1\"}],\n" + + " \"completed\": null\n" + + " },\n" + + " \"version\": 1371160528774\n" + + "}"; + + System.out.println(JsonPath.read(json, "$.data.passes[0].id")); + System.out.println(JsonPath.isPathDefinite("$.data.passes[0].id")); + + System.out.println(JsonPath.read(json, "$.data2.passes[0].id")); + System.out.println(JsonPath.isPathDefinite("$.data2.passes[0].id")); + } @Test public void array_start_expands() throws Exception {