Java Nifi在ExecuteScript中获取错误
我一直试图从nifi的ExecuteScript处理器中提取数据,并将其作为属性附加到流文件。我已经尝试了很多资料来源,尤其是马特·伯吉斯的funnifi博客上的资料 下面是我的代码Java Nifi在ExecuteScript中获取错误,java,python,json,apache-nifi,Java,Python,Json,Apache Nifi,我一直试图从nifi的ExecuteScript处理器中提取数据,并将其作为属性附加到流文件。我已经尝试了很多资料来源,尤其是马特·伯吉斯的funnifi博客上的资料 下面是我的代码 import json import java.io from org.apache.commons.io import IOUtils from java.nio.charset import StandardCharsets from org.apache.nifi.processor.io import St
import json
import java.io
from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback
originalFlowFile = session.get()
text = IOUtils.toString(originalFlowFile)
log.info(text)
if(originalFlowFile != None):
event = json.loads(text)
if (event['true'] == 'Y'):
flowfile = session.putAttribute(flowfile, "true", "Y")
elif (event['src'] == 'ONE' ):
allAttributes = { "true": "N", "src": "ONE" }
flowfile = session.putAllAttributes(flowfile, allAttributes)
elif (event['src'] == 'TWO' ):
allAttributes = { "true": "N", "src": "TWO" }
flowfile = session.putAllAttributes(flowfile, allAttributes)
session.transfer(flowFile, REL_SUCCESS)
session.commit()
这是用python编写的。流文件数据是一个JSON。不过,我还是无法解析它
信息部分是的输出
text = IOUtils.toString(originalFlowFile)
任何帮助都将不胜感激
p、 我不熟悉python
测试数据
{
"true":"N",
"src":"ONE",
"var1":"value1",
"var2":"value2"
}
更新
我的更新代码仍然不起作用:
import json
import java.io
from org.apache.commons.io import IOUtils
originalFlowFile = session.get()
if(originalFlowFile != None):
inputStream = session.read(originalFlowFile)
text = IOUtils.toString(inputStream)
log.info(text)
event = json.loads(text)
if (event['true'] == 'Y'):
flowfile = session.putAttribute(flowfile, "true", "Y")
elif (event['src'] == 'ONE' ):
allAttributes = { "true": "N", "src": "ONE" }
flowfile = session.putAllAttributes(flowfile, allAttributes)
elif (event['src'] == 'TWO' ):
allAttributes = { "true": "N", "src": "TWO" }
flowfile = session.putAllAttributes(flowfile, allAttributes)
session.transfer(flowFile, REL_SUCCESS)
session.commit()
对流文件本身调用IOUtils.toString()可能不会起作用,因为流文件不是InputStream或读取器,也不是可以自己读取的东西。事实上,我很惊讶这一行没有产生异常
有两种方法可以获取流文件的内容
第一种方法是从会话中获取流文件的InputStream:
originalFlowFile = session.get();
inputStream = session.read(originalFlowFile);
text = IOUtils.toString(inputStream);
第二种方法是使用InputStreamCallback:
flowFile = session.read(flowFile, {inputStream ->
// read the inputStream
} as InputStreamCallback);
对流文件本身调用IOUtils.toString()可能不会起作用,因为流文件不是InputStream或读取器,也不是可以自己读取的东西。事实上,我很惊讶这一行没有产生异常
有两种方法可以获取流文件的内容
第一种方法是从会话中获取流文件的InputStream:
originalFlowFile = session.get();
inputStream = session.read(originalFlowFile);
text = IOUtils.toString(inputStream);
第二种方法是使用InputStreamCallback:
flowFile = session.read(flowFile, {inputStream ->
// read the inputStream
} as InputStreamCallback);
错误
无法解码json对象
表示流文件内容中没有json对象。您能否更新您的问题并添加:1)flowfile内容。2) 一个你想用脚本做什么的目标。为什么在不熟悉python的时候选择它呢?我想使用javascript,但选项中没有!示例数据,我现在正在添加…目标是检查数据,获取数据点,在此基础上我希望创建单独的流并将其添加为属性。我将流文件发布到kafka流,并验证接收到的数据实际上是JSON格式的。ecmascript-是javascript;)错误无法解码json对象
表示流文件内容中没有json对象。您能否更新您的问题并添加:1)flowfile内容。2) 一个你想用脚本做什么的目标。为什么在不熟悉python的时候选择它呢?我想使用javascript,但选项中没有!示例数据,我现在正在添加…目标是检查数据,获取数据点,在此基础上我希望创建单独的流并将其添加为属性。我将流文件发布到kafka流,并验证接收到的数据实际上是JSON格式的。ecmascript-是javascript;)尝试了第一种方法,得到了无法解码JSON的相同错误。但我看到卡夫卡的内容。。。数据是JSON…我已经添加了更新的代码。当你做log.info(文本)的时候,测试json和givenSo是一样的。它会把json打印到nifi app.log吗?我还建议你使用nifi UI来调查你的流传单中有什么。您可以让脚本处理器停止运行,让一些流文件在它前面的队列中建立起来,然后右键单击队列和do List队列,然后选择一个条目并深入查看内容,以确保json在其中。我使用NiFi UI尝试获取数据,但是NiFi UI只提供队列中对象的元数据…它不显示队列中的数据,只显示位置、UUID、文件名、大小等…好的,使用上面的第一种方法,如果将log.info(text)放在text=IOUtils.toString(inputStream)之后,你看到JSON被记录到nifi app.log了吗?尝试了第一种方法,得到了相同的错误,没有JSON可以被解码。但我看到卡夫卡的内容。。。数据是JSON…我已经添加了更新的代码。当你做log.info(文本)的时候,测试json和givenSo是一样的。它会把json打印到nifi app.log吗?我还建议你使用nifi UI来调查你的流传单中有什么。您可以让脚本处理器停止运行,让一些流文件在它前面的队列中建立起来,然后右键单击队列和do List队列,然后选择一个条目并深入查看内容,以确保json在其中。我使用NiFi UI尝试获取数据,但是NiFi UI只是给出队列中对象的元数据…它没有显示队列中的数据,只是显示位置、UUID、文件名、大小等…好的,那么使用上面的第一种方法,如果将log.info(text)放在text=IOUtils.toString(inputStream)之后,会看到JSON被记录到NiFi-app.log吗?