You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NiFi将单个JSON拆分为两个独立JSON对象?

用Apache NiFi拆分JSON为两个独立对象的实现方案

我来给你一步步拆解怎么实现这个需求,核心用NiFi的两个处理器配合就能搞定:

第一步:用JoltTransformJSON重组数据结构

首先我们需要把原始的单JSON对象转换成包含两个子对象的数组,这样后续才能拆分。这里用Jolt的Shift操作来做字段映射:

在JoltTransformJSON的Jolt Specification里输入以下JSON:

[
  {
    "operation": "shift",
    "spec": {
      "campaign_key": "[0].campaign_key",
      "client_key": "[0].client_key",
      "cpn_mid_counter": "[0].cpn_mid_counter",
      "cpn_name": "[0].cpn_name",
      "cpn_status": "[0].cpn_status",
      "clt_name": "[1].clt_name",
      "clt_status": "[1].clt_status"
    }
  }
]

这个配置会把原始JSON里的campaign相关字段放到数组的第0位,client相关字段放到第1位,输出的结构是:

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

第二步:用SplitJson拆分数组为独立FlowFile

接下来添加SplitJson处理器,配置它的Json Path Expression为$.*。这个表达式会遍历数组里的每一个元素,把每个元素拆成单独的FlowFile。

执行之后,你就会得到两个独立的FlowFile,分别对应你需要的两个JSON对象。

可选优化:给拆分后的FlowFile打标记(区分类型)

如果需要后续区分哪个是campaign对象、哪个是client对象,可以在拆分后添加RouteOnContent处理器:

  • 配置一个路由规则,检查内容是否包含"campaign_key",匹配的FlowFile添加属性data_type=campaign
  • 再配置一个规则,检查内容是否包含"clt_name",匹配的FlowFile添加属性data_type=client

这样后续处理的时候就能轻松区分这两个对象啦。

内容的提问来源于stack exchange,提问作者Karthik Mannava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:19:04