使用Nifi将JSON分为两个单独的JSON对象

Kar*_*ava 2 json apache-nifi kylo

我有一个像JSON

{
    "campaign_key": 316,
    "client_key": 127,
    "cpn_mid_counter": "24",
    "cpn_name": "Bopal",
    "cpn_status": "Active",
    "clt_name": "Bopal Ventures",
    "clt_status": "Active"
}
Run Code Online (Sandbox Code Playgroud)

预期产量

第一个JSON:

{
    "campaign_key": 316,
    "client_key": 127,
    "cpn_mid_counter": "24",
    "cpn_name": "Bopal",
    "cpn_status": "Active"
}
Run Code Online (Sandbox Code Playgroud)

第二个JSON:

{
    "clt_name": "Bopal Ventures",
    "clt_status": "Active"
}
Run Code Online (Sandbox Code Playgroud)

如何使用NIFI来实现?谢谢。

Siv*_*man 6

您可以按照“用户”的指示进行操作。这种方法的不好之处在于,如果字段数量在增加,则需要向其中添加那么多JSON Path表达式属性EvaluateJsonPath,然后在中添加那么多属性ReplaceText

相反,我建议的是,将QueryRecordRecord Reader设置为JsonTreeReader,将Record Writer设置为JsonRecordSetWriter。并添加两个动态关系属性,如下所示:

json1 : SELECT campaign_key, client_key, cpn_mid_counter, cpn_name, cpn_status FROM FLOWFILE

json2 : SELECT clt_name, clt_status FROM FLOWFILE
Run Code Online (Sandbox Code Playgroud)

这种方法负责读取和写入JSON格式的输出。另外,如果要添加更多字段,只需在SQL SELECT语句中添加字段名称。

QueryRecord处理器使您可以对FlowFile内容执行SQL查询。可以在这里找到有关此处理器的更多详细信息

附加截图

在此处输入图片说明

在此处输入图片说明


VM *_* MP 5

卡西克,

使用EvaluateJsonPath处理器通过使用其键来获取所有 json 值。

示例:$.campaign_keyfor 获取compaign 键值和$.clt_name获取clt 名称。

像上面一样,您可以获得所有json。

然后使用 ReplaceText Processor 将单个 json 转换为两个 json。

{"Compaign_Key":${CompaignKey},...etc}
{"Clt_name":${clt_name}}
Run Code Online (Sandbox Code Playgroud)

它会将单个 json 转换为两个 json。

希望这有帮助,如果您有问题,请告诉我。