From ec1f268ceec9545252eb51e8caa5d18026b58c08 Mon Sep 17 00:00:00 2001 From: MoonFruit Date: Mon, 31 May 2021 14:55:15 +0800 Subject: [PATCH] Support convert normal object as parsed json tree --- .../com/jayway/jsonpath/internal/ParseContextImpl.java | 3 ++- .../com/jayway/jsonpath/spi/json/GsonJsonProvider.java | 5 +++++ .../jsonpath/spi/json/JacksonJsonNodeJsonProvider.java | 5 +++++ .../com/jayway/jsonpath/spi/json/JsonProvider.java | 10 ++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/ParseContextImpl.java b/json-path/src/main/java/com/jayway/jsonpath/internal/ParseContextImpl.java index af330977..26f847d5 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/ParseContextImpl.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/ParseContextImpl.java @@ -28,7 +28,8 @@ public class ParseContextImpl implements ParseContext { @Override public DocumentContext parse(Object json) { notNull(json, "json object can not be null"); - return new JsonContext(json, configuration); + Object obj = configuration.jsonProvider().parse(json); + return new JsonContext(obj, configuration); } @Override diff --git a/json-path/src/main/java/com/jayway/jsonpath/spi/json/GsonJsonProvider.java b/json-path/src/main/java/com/jayway/jsonpath/spi/json/GsonJsonProvider.java index d28e7cc7..b66ff280 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/spi/json/GsonJsonProvider.java +++ b/json-path/src/main/java/com/jayway/jsonpath/spi/json/GsonJsonProvider.java @@ -119,6 +119,11 @@ public class GsonJsonProvider extends AbstractJsonProvider { return unwrapped; } + @Override + public Object parse(Object object) throws InvalidJsonException { + return object instanceof JsonElement ? object : gson.toJsonTree(object); + } + @Override public Object parse(final String json) throws InvalidJsonException { return PARSER.parse(json); diff --git a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java b/json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java index 2b8f6e21..ddddabcd 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java +++ b/json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java @@ -45,6 +45,11 @@ public class JacksonJsonNodeJsonProvider extends AbstractJsonProvider { this.objectMapper = objectMapper; } + @Override + public Object parse(Object object) throws InvalidJsonException { + return object instanceof JsonNode ? object : objectMapper.valueToTree(object); + } + @Override public Object parse(String json) throws InvalidJsonException { try { diff --git a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonProvider.java b/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonProvider.java index fa7dda41..afa9ce71 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonProvider.java +++ b/json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonProvider.java @@ -23,6 +23,16 @@ public interface JsonProvider { static final Object UNDEFINED = new Object(); + /** + * Convert the given object as a parsed json object + * @param object object to parse + * @return The parsed json object + * @throws InvalidJsonException + */ + default Object parse(Object object) throws InvalidJsonException { + return object; + } + /** * Parse the given json string * @param json json string to parse