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

时间:2018-05-22 06:36:14

标签: 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"
}

预期输出

1st JSON:

{
    "campaign_key": 316,
    "client_key": 127,
    "cpn_mid_counter": "24",
    "cpn_name": "Bopal",
    "cpn_status": "Active"
}

2nd JSON:

{
    "clt_name": "Bopal Ventures",
    "clt_status": "Active"
}

如何使用NIFI实现这一目标?感谢。

2 个答案:

答案 0 :(得分:5)

你可以做'用户'所说的话。关于该方法的不太好的事情是,如果您的字段数量在增加,那么您需要将许多JSON路径表达式属性添加到EvaluateJsonPath,然后在ReplaceText中添加许多属性

相反,我建议使用QueryRecord将Record 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

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

QueryRecord处理器允许您对FlowFile内容执行SQL查询。有关此处理器的更多详细信息,请参见here

附加屏幕截图

enter image description here

enter image description here

答案 1 :(得分:4)

KARTHIK,

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

示例:$.campaign_key用于获取共享密钥值,$.clt_name用于获取clt名称。

就像上面一样,你可以得到所有的jsons。

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

{"Compaign_Key":${CompaignKey},...etc}
{"Clt_name":${clt_name}}

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

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