From 63b5c6d0000990e7a749141769425042db344643 Mon Sep 17 00:00:00 2001 From: saynaaskh Date: Wed, 18 May 2022 00:18:29 +0800 Subject: [PATCH] add feature #825 --- .../jayway/jsonpath/internal/JsonContext.java | 8 +++++++ .../java/com/jayway/jsonpath/Issue_825.java | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 json-path/src/test/java/com/jayway/jsonpath/Issue_825.java diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java b/json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java index 76985f78..2374c8f5 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/JsonContext.java @@ -29,8 +29,10 @@ import com.jayway.jsonpath.spi.cache.CacheProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Stream; import static com.jayway.jsonpath.JsonPath.compile; import static com.jayway.jsonpath.internal.Utils.notEmpty; @@ -79,6 +81,9 @@ public class JsonContext implements DocumentContext { @Override public T read(String path, Class type, Predicate... filters) { + if (type == Stream.class) { + return (T) convert(read(path, filters), List.class, configuration).stream(); + } return convert(read(path, filters), type, configuration); } @@ -90,6 +95,9 @@ public class JsonContext implements DocumentContext { @Override public T read(JsonPath path, Class type) { + if (type == Stream.class) { + return (T) convert(read(path), List.class, configuration).stream(); + } return convert(read(path), type, configuration); } diff --git a/json-path/src/test/java/com/jayway/jsonpath/Issue_825.java b/json-path/src/test/java/com/jayway/jsonpath/Issue_825.java new file mode 100644 index 00000000..2a42b923 --- /dev/null +++ b/json-path/src/test/java/com/jayway/jsonpath/Issue_825.java @@ -0,0 +1,21 @@ +package com.jayway.jsonpath; + +import org.junit.Test; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import static java.util.Arrays.asList; +import static org.assertj.core.api.Assertions.assertThat; + +public class Issue_825 extends BaseTest { + @Test + public void double_stream_test() { + Stream stream = JsonPath.parse(JSON_DOCUMENT).read("store.book[?(@.display-price <= $.max-price)].display-price", Stream.class); + assertThat(stream.collect(Collectors.toList())).containsAll(asList(8.95D, 8.99D)); + } + + @Test + public void string_stream_test() { + Stream stream = JsonPath.parse(JSON_DOCUMENT).read("$.store.book.[*].title", Stream.class); + assertThat(stream.collect(Collectors.toList())).containsAll(asList("Sayings of the Century", "Sword of Honour", "Moby Dick", "The Lord of the Rings")); + } +}