From de9413d2139b96af2a4aef7a3c2dad0ff5e38df6 Mon Sep 17 00:00:00 2001 From: Pigdrum <397028648@qq.com> Date: Sun, 25 Apr 2021 19:28:06 +0800 Subject: [PATCH 1/4] The method getPropertyKeys() in class JsonOrgJsonProvider doesn't check empty jsonObject. --- .../jsonpath/spi/json/JsonOrgJsonProvider.java | 12 ++++++++---- .../com/jayway/jsonpath/JsonOrgJsonProviderTest.java | 11 +++++++++++ 2 files changed, 19 insertions(+), 4 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 8dc22bb5c..5c74e79ad 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 @@ -148,12 +148,16 @@ public Collection getPropertyKeys(Object obj) { JSONObject jsonObject = toJsonObject(obj); List keys = new ArrayList(); try { - for (int i = 0; i < jsonObject.names().length(); i++) { - String key = (String) jsonObject.names().get(i); - keys.add(key); + if(jsonObject.names()==null) + return keys; + else { + for (int i = 0; i < jsonObject.names().length(); i++) { + String key = (String) jsonObject.names().get(i); + keys.add(key); + } + return keys; } - return keys; } 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 47ce0c1ea..f7aeb8ab1 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java @@ -1,5 +1,7 @@ package com.jayway.jsonpath; +import com.jayway.jsonpath.spi.json.JsonOrgJsonProvider; +import com.jayway.jsonpath.spi.mapper.JsonOrgMappingProvider; import org.json.JSONArray; import org.json.JSONObject; import org.junit.Test; @@ -76,4 +78,13 @@ public void read_book_length() { assertThat(result).isEqualTo(4); } + @Test + public void Issue497() { + String json = "{\"foo\": \"bar\", \"emptyObject\": {},\"emptyList\":[]}"; + Configuration config = Configuration.defaultConfiguration() + .jsonProvider(new JsonOrgJsonProvider()) + .mappingProvider(new JsonOrgMappingProvider()); + Object result = JsonPath.using(config).parse(json).read("$..foo"); + assertThat(result.toString()).isEqualTo("[\"bar\"]"); + } } From 1132f1a2eb411cacd721fd12840c76f5b1c9b606 Mon Sep 17 00:00:00 2001 From: Pigdrum <397028648@qq.com> Date: Sun, 25 Apr 2021 20:23:16 +0800 Subject: [PATCH 2/4] Addition testcase --- .../com/jayway/jsonpath/JsonOrgJsonProviderTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 f7aeb8ab1..11fd18205 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java @@ -87,4 +87,14 @@ public void Issue497() { Object result = JsonPath.using(config).parse(json).read("$..foo"); assertThat(result.toString()).isEqualTo("[\"bar\"]"); } + + @Test + public void Issue497_2() { + String json = "{\"foo\": \"bar\", \"emptyObject\": {\"emptyList\":[]},\"emptyList\":[]}"; + Configuration config = Configuration.defaultConfiguration() + .jsonProvider(new JsonOrgJsonProvider()) + .mappingProvider(new JsonOrgMappingProvider()); + Object result = JsonPath.using(config).parse(json).read("$..foo"); + assertThat(result.toString()).isEqualTo("[\"bar\"]"); + } } From 5bf7257b975ff300ee0e373a2bf7832fe1d6bb4b Mon Sep 17 00:00:00 2001 From: Pigdrum <397028648@qq.com> Date: Thu, 6 May 2021 10:08:30 +0800 Subject: [PATCH 3/4] simplify the implementation. And change method names of testcases to something more descriptive --- .../jsonpath/spi/json/JsonOrgJsonProvider.java | 16 +++++----------- .../jayway/jsonpath/JsonOrgJsonProviderTest.java | 4 ++-- 2 files changed, 7 insertions(+), 13 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 5c74e79ad..773d82a56 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 @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Objects; public class JsonOrgJsonProvider extends AbstractJsonProvider { @@ -143,21 +144,14 @@ public boolean isMap(Object obj) { return (obj instanceof JSONObject); } + @SuppressWarnings("unchecked") @Override public Collection getPropertyKeys(Object obj) { JSONObject jsonObject = toJsonObject(obj); - List keys = new ArrayList(); try { - if(jsonObject.names()==null) - return keys; - else { - for (int i = 0; i < jsonObject.names().length(); i++) { - String key = (String) jsonObject.names().get(i); - keys.add(key); - - } - return keys; - } + if(Objects.isNull(jsonObject.names())) + return new ArrayList<>(); + return jsonObject.keySet(); } 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 11fd18205..17486f91f 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java @@ -79,7 +79,7 @@ public void read_book_length() { } @Test - public void Issue497() { + public void Test_getPropertyKeys_empty_object() { String json = "{\"foo\": \"bar\", \"emptyObject\": {},\"emptyList\":[]}"; Configuration config = Configuration.defaultConfiguration() .jsonProvider(new JsonOrgJsonProvider()) @@ -89,7 +89,7 @@ public void Issue497() { } @Test - public void Issue497_2() { + public void Test_getPropertyKeys_empty_nest_object() { String json = "{\"foo\": \"bar\", \"emptyObject\": {\"emptyList\":[]},\"emptyList\":[]}"; Configuration config = Configuration.defaultConfiguration() .jsonProvider(new JsonOrgJsonProvider()) From 2e749f50df830be255478eedb629e961c6a4101e Mon Sep 17 00:00:00 2001 From: Pigdrum <397028648@qq.com> Date: Thu, 6 May 2021 11:25:57 +0800 Subject: [PATCH 4/4] change names --- .../java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 17486f91f..8600de888 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JsonOrgJsonProviderTest.java @@ -79,7 +79,7 @@ public void read_book_length() { } @Test - public void Test_getPropertyKeys_empty_object() { + public void test_getPropertyKeys_empty_object() { String json = "{\"foo\": \"bar\", \"emptyObject\": {},\"emptyList\":[]}"; Configuration config = Configuration.defaultConfiguration() .jsonProvider(new JsonOrgJsonProvider()) @@ -89,7 +89,7 @@ public void Test_getPropertyKeys_empty_object() { } @Test - public void Test_getPropertyKeys_empty_nest_object() { + public void test_getPropertyKeys_empty_nest_object() { String json = "{\"foo\": \"bar\", \"emptyObject\": {\"emptyList\":[]},\"emptyList\":[]}"; Configuration config = Configuration.defaultConfiguration() .jsonProvider(new JsonOrgJsonProvider())