Nifi - SplitJson 保留所有其他信息

Nifi - SplitJson retaining all other info

在 Nifi 中工作,我在流文件的内容中有以下 json 结构:

{
    "firstname": "fred",
    "lastname": "jackson",
    "dob": "19550607",
    "children": [{
            "firstname": "janet",
            "lastname": "jackson",
            "dob": "20020607"
        },
        {
            "firstname": "michael",
            "lastname": "jackson",
            "dob": "20010201"
        },
        {
            "firstname": "tito",
            "lastname": "jackson",
            "dob": "20030707"
        }
    ]
}

我想将其拆分为三 (3) 个流文件,每个流文件都包含顶级信息,但只有一个 child。例如,其中一个看起来像这样:

{
    "firstname": "fred",
    "lastname": "jackson",
    "dob": "19550607",
    "children": {
        "firstname": "janet",
        "lastname": "jackson",
        "dob": "20020607"
    }
}

同样,我将拥有三个不同的流程文件,每个文件一个 child。输出不必完全像这样。重要的是我能够拆分结构,同时在每个结果流文件中维护公共数据。

我尝试将 SplitJson 与“$.children”的 JSONExpression 一起使用,这确实为我提供了三个流文件,但我丢失了 parent 信息。我可以为属性中的公共元素保存 key/values,拆分,然后添加它们,但是 parent 信息可能比我的示例(动态字段等)更复杂,所以我不确定如何我会这样做。

感谢任何想法或想法。

最简单的方法是使用 ForkRecord 和 JSON Reader/Writer。

Include Parent Fields 设置为 true 以保留父字段。

但是,这可能会以您不希望的方式使 JSON 变平 - 试一试。

或者,查看 JoltTransformJSON which gives a lot more flexibility, but is quite complex to work out the appropriate spec. You can use https://jolt-demo.appspot.com/#inception 来测试您的 JOLT 规格。