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

Split JSON into two individual JSON objects using Nifi

我有一个 JSON 喜欢

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

预期输出

第一 JSON :

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

第 2 JSON:

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

我如何通过使用 NIFI 来实现这一点?谢谢。

卡尔提克,

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

示例:$.campaign_key 用于获取广告键值,$.clt_name 用于获取 clt 名称。

像上面一样你可以获得所有 jsons.

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

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

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

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

你可以按照'user'所说的去做。这种方法的不好之处在于,如果字段数量增加,则需要将那么多 JSON 路径表达式属性添加到 EvaluateJsonPath,然后在 EvaluateJsonPath 中添加那么多属性=12=].

我的建议是,使用 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

附上截图