【发布时间】:2020-02-24 20:35:01
【问题描述】:
我在 NiFi 中有一个管道,可以提取一些我需要清理的无效 JSON。我设计的最佳解决方案是通过ExecuteStreamCommand 运行 Python 脚本,同时一举清理/拆分它。然而,即使我在 for 循环中使用 sys.stdout.write(),在 NiFi 的输出流中也只有原始 JSON 出现。
我是在滥用sys.stdout.write() 还是这可能,但我只是做错了什么?我的最终目标是让json的每一行都成为一个新的流文件,即文件1是{"fruit":"apple",...,文件2是{"fruit":"cherry",...,依此类推。
示例 JSON
{"fruit":"apple", "vegetable":"celery", "location":{"country":"nor\\way", "city":"oslo", }, "color":"blue"}
{"fruit":"cherry", "vegetable":"kale", "location":{"country":"france", "city":"calais", }, "color":"green"}
{"fruit":"peach", "vegetable":"peas", "location":{"country":"united\\kingdom", "city":"london", }, "color":"yellow"}
脚本
import json
import re
import sys
flow_file = sys.stdin.read()
try:
load = json.loads(flow_file)
sys.stdout.write(flow_file)
except:
flow_file_esc = re.sub(r"[(\\)]", "", flow_file)
for f in flow_file_esc.splitlines():
sys.stdout.write(str(f))
【问题讨论】:
-
ExecuteStreamCommand只为一个输入文件生成一个输出文件。
标签: json python-3.x apache-nifi