From b536af9b9a1e75362ba2a9454c0217f9d706743f Mon Sep 17 00:00:00 2001 From: Jochen Berger Date: Thu, 23 Mar 2017 16:00:20 +0100 Subject: [PATCH 1/2] fix result if object does not contain key (fixes #270) --- .../com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java | 3 +-- .../java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java | 8 ++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java b/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java index 6760f869..516ce424 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java +++ b/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java @@ -96,11 +96,10 @@ public class JsonOrgJsonProvider extends AbstractJsonProvider { public Object getMapValue(Object obj, String key) { try { JSONObject jsonObject = toJsonObject(obj); - Object o = jsonObject.get(key); if (!jsonObject.has(key)) { return UNDEFINED; } else { - return unwrap(o); + return unwrap(jsonObject.get(key)); } } catch (JSONException e) { throw new JsonPathException(e); diff --git a/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java b/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java index d24e30d1..59ba665c 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java @@ -44,4 +44,12 @@ public class JsonOrgJsonProviderTest extends BaseTest { assertThat(books.size()).isEqualTo(4); } + + @Test + public void read_books_with_isbn() { + + JSONArray books = using(JSON_ORG_CONFIGURATION).parse(JSON_DOCUMENT).read("$..book[?(@.isbn)]"); + + assertThat(books.length()).isEqualTo(2); + } } From 7fc262724bf469d1ff9f1036dbe47b9fe1dc2652 Mon Sep 17 00:00:00 2001 From: jochenberger Date: Thu, 23 Mar 2017 16:06:10 +0100 Subject: [PATCH 2/2] Better approach --- .../com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java b/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java index 516ce424..0c5f169e 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java +++ b/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonOrgJsonProvider.java @@ -96,10 +96,11 @@ public class JsonOrgJsonProvider extends AbstractJsonProvider { public Object getMapValue(Object obj, String key) { try { JSONObject jsonObject = toJsonObject(obj); - if (!jsonObject.has(key)) { + Object o = jsonObject.opt(key); + if (o == null) { return UNDEFINED; } else { - return unwrap(jsonObject.get(key)); + return unwrap(o); } } catch (JSONException e) { throw new JsonPathException(e);