在Nifi的自定义处理器中的单个字段中评估表达式和正则表达式

时间:2019-05-14 11:58:20

标签: apache-nifi

在我的自定义处理器中,我在下面的字段中添加了

public static final PropertyDescriptor CACHE_VALUE = new PropertyDescriptor.Builder()
            .name("Cache Value")
            .description("Cache Value")
            .required(true)
            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
            .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
            .build();

我希望在其中读取流文件属性,例如$ {fieldName} 以及。*等正则表达式来读取全部内容或部分内容,例如$ .nodename.subnodename

为此,我添加了以下代码

for (FlowFile flowFile : flowFiles) {
                final String cacheKey = context.getProperty(CACHE_KEY).evaluateAttributeExpressions(flowFile).getValue();
                String cacheValue = null;
                cacheValue = context.getProperty(CACHE_VALUE).evaluateAttributeExpressions(flowFile).getValue();
                if (".*".equalsIgnoreCase(cacheValue.trim())) {
                    final ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                    session.exportTo(flowFile, bytes);
                    cacheValue = bytes.toString();
                }
                cache.put(cacheKey, cacheValue);
                session.transfer(flowFile, REL_SUCCESS);
            }

如何实现这一部分内容,例如$ .nodename.subnodename。     我需要解析json还是有其他方法?

1 个答案:

答案 0 :(得分:0)

您要么必须自己解析JSON,要么使用EvaluateJsonPath处理器,然后才能到达该处理器,以通过JSON Path表达式将内容值提取到属性中,然后在您的自定义代码中,引用属性。