【发布时间】:2017-03-29 22:49:57
【问题描述】:
我正在处理一个 Nifi 流程,我正在获取一个包含多个键值对的 JSON 文档。我正在使用ExecuteScript 处理器和python。
我的目标是创建基于 JSON keys 的各种 URL。键是数字的,它们看起来像这样:
keys = [10200, 10201, 10202, ...]
我想要的 URL 有 3 种类型,它们应该如下所示:
http://google.com/10200
http://bing.com/10200
http://yahoo.com/10200
我正在尝试遍历我的 keys[] 并为其包含的每个数字键创建 3 个特定的 url。我正在尝试以下代码:
从-->列表中读取一个数字键创建3个网址-->吐出一个流文件。
......并读取列表中的下一个数字键并继续循环......
我有以下代码,但是当我给它一个 JSON 流文件时,它现在什么都不做。有人可以告诉我我做错了什么吗?
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
class ModJSON(StreamCallback):
def __init__(self):
self.parentFlowFile = None
pass
def process(self, inputStream, outputStream):
text = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
obj = json.loads(text)
flowfiles_list = []
outputStream.write(bytearray(json.dumps(obj.keys(), indent=4).encode('utf-8')))
for numerical_key in obj.keys():
# create 1 flowfile for each numerical_key. Each flow file should have 3 url attributes
flowFile = session.create(self.parentFlowFile)
if (flowFile != None):
flowFile = session.write(flowFile, "Does not matter")
flowFile = session.putAttribute(flowFile, "google", "http://google.com/"+ numerical_key)
flowFile = session.putAttribute(flowFile, "google", "http://bing.com/"+ numerical_key)
flowFile = session.putAttribute(flowFile, "google", "http://yahoo.com/"+ numerical_key)
flowfiles_list.append(flowFile)
for flow in flowfiles_list:
session.transfer(flow, REL_SUCCESS)
【问题讨论】:
标签: python apache-nifi