在NIFI中将Json拆分为多个Json

在NIFI中将Json拆分为多个Json,json,apache-nifi,Json,Apache Nifi,我有下面的json文件,我想在NIFI中拆分它 输入: [ { "id" : 123, "ticket_id" : 345, "events" : [ { "id" : 3322, "type" : "xyz" }, { "id" : 6675, "type" : "abc", "value" : "sample value", "field_name" : "subject" }, { "id" : 9988,

我有下面的json文件,我想在NIFI中拆分它

输入:

    [ {
  "id" : 123,
  "ticket_id" : 345,
  "events" : [ {
    "id" : 3322,
    "type" : "xyz"
  }, {
    "id" : 6675,
    "type" : "abc",
    "value" : "sample value",
    "field_name" : "subject"
  }, {
    "id" : 9988,
    "type" : "abc",
    "value" : [ "text_file", "json_file" ],
    "field_name" : "tags"
  }]
  }]
我的输出应该是3个不同的JSON,如下所示:

{
  "id" : 123,
  "ticket_id" : 345,
  "events.id" :3322,
  "events.type":xyz
  }

  {
  "id" : 123,
  "ticket_id" : 345,
  "events.id" :6675,
  "events.type":"abc",
  "events.value": "sample value"
  "events.field_name":"subject"
  }

  {
  "id" : 123,
  "ticket_id" : 345,
  "events.id" :9988,
  "events.type":"abc",
  "events.value": "[ "text_file", "json_file" ]"
  "events.field_name":"tags"

  }
我想知道我们可以使用splitjson吗?我的意思是splitjson可以基于json中存在的json对象数组来拆分json吗

请告诉我是否有办法实现此目的。

使用reduce函数:

function split(json) {
    return json.reduce((acc, item) => {
        const events = item.events.map((evt) => {
            const obj = {id: item.id, ticket_id: item.ticket_id};
            for (const k in evt) {
                obj[`events.${k}`] = evt[k];
            }
            return obj;
        });
        return [...acc, ...events];
    }, []);
}

const input = [{"id":123,"ticket_id":345,"events":[{"id":3322,"type":"xyz"},{"id":6675,"type":"abc","value":"sample value","field_name":"subject"},{"id":9988,"type":"abc","value":["text_file","json_file"],"field_name":"tags"}]}];
const res = split(input);
console.log(res);

如果您想要3个不同的流文件,每个文件都包含数组中的一个JSON对象,那么您应该能够使用JSONPath为
$
和/或
$.*

的SplitJson来实现这一点,谢谢您,但是我想知道我们是否可以使用Nifido中的处理器,我需要两个分别带有$和$.*的SplitJson?因为使用一个$.*splitjson和下一个$.events,我得到的事件与id和作者id分开