Github user ottobackwards commented on a diff in the pull request:
https://github.com/apache/metron/pull/727#discussion_r138315063
--- Diff:
metron-stellar/stellar-common/src/main/java/org/apache/metron/stellar/dsl/functions/StringFunctions.java
---
@@ -550,4 +548,90 @@ else if(var.length() == 0) {
return new ParseException("Unable to parse JSON string");
}
}
+
+ @Stellar(name = "JSON_TO_MAP"
+ , description = "Returns a MAP object for the specified JSON
string"
+ , params = {
+ "str - the JSON String to convert, may be null"
+ }
+ , returns = "a MAP object containing the parsed JSON string"
+ )
+ public static class JsonToMap extends BaseStellarFunction {
+
+ @Override
+ public Object apply(List<Object> strings) {
+
+ if (strings == null || strings.size() == 0) {
+ throw new IllegalArgumentException("[JSON_TO_MAP] incorrect
arguments. Usage: JSON_TO_MAP <JSON String>");
+ }
+ String var = (strings.get(0) == null) ? null : (String)
strings.get(0);
+ if (var == null) {
+ return null;
+ } else if (var.length() == 0) {
+ return var;
+ } else {
+ ObjectMapper objectMapper = new ObjectMapper();
+
--- End diff --
I have a question here. If you just do the load, and the string is
invalid, would you not get the same exception? What is the difference. If the
string is always valid, and that is the most common case, then we are always
doing 2* the processing. That doesn't seem right in a high volume stream system
---