diff --git a/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/JacksonEvent.java b/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/JacksonEvent.java index 363aeda714..9b5ae72b77 100644 --- a/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/JacksonEvent.java +++ b/data-prepper-api/src/main/java/org/opensearch/dataprepper/model/event/JacksonEvent.java @@ -525,23 +525,27 @@ private JsonStringBuilder(final JacksonEvent event) { this.event = event; } - - public String toJsonString() { + private JsonNode getBaseNode() { // Get root node. - JsonNode baseNode; if (getRootKey() != null && !getRootKey().isEmpty() && event.containsKey(getRootKey())) { - baseNode = event.getNode(getRootKey()); - } else { - baseNode = event.getJsonNode(); + return event.getNode(getRootKey()); } - + return event.getJsonNode(); + } + + + public String toJsonString() { + String jsonString; if (getIncludeKeys() != null && !getIncludeKeys().isEmpty()) { - jsonString = searchAndFilter(baseNode, "", getIncludeKeys(), RETAIN_ALL); + jsonString = searchAndFilter(getBaseNode(), "", getIncludeKeys(), RETAIN_ALL); } else if (getExcludeKeys() != null && !getExcludeKeys().isEmpty()) { - jsonString = searchAndFilter(baseNode, "", getExcludeKeys(), EXCLUDE_ALL); + jsonString = searchAndFilter(getBaseNode(), "", getExcludeKeys(), EXCLUDE_ALL); } else { - jsonString = baseNode.toString(); + // Some successors have its own implementation of toJsonString, such as JacksonSpan. + // In such case, the root key will be ignored. + // TODO: Need to check if such behaviour is expected. + jsonString = event.toJsonString(); } final String tagsKey = getTagsKey(); @@ -562,7 +566,7 @@ public String toJsonString() { * @param filterAction Either to include (RETAIN_ALL or true) or to exclude (EXCLUDE_ALL or false) * @return a json string with filtered keys */ - private String searchAndFilter(JsonNode node, String path, final List filterKeys, boolean filterAction) { + String searchAndFilter(JsonNode node, String path, final List filterKeys, boolean filterAction) { if (node.isArray()) { // for array node. StringJoiner sj = new StringJoiner(",", "[", "]");