Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Nifi在ExecuteScript中获取错误_Java_Python_Json_Apache Nifi - Fatal编程技术网

Java Nifi在ExecuteScript中获取错误

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

我一直试图从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 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吗?