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

如何不拆分完整JSON FlowFile直接执行JoltTransformation转换

问题说明

InvokeHTTP组件返回的待处理FlowFile内容为JSON数组,格式如下:

[
  {
    "name": "Rolf",
    "sur_name": "ramsfl"
  },
  {
    "name": "Jose",
    "sur_name": "maxim"
  },
  {
    "name": "Andrei",
    "sur_name": "alexo"
  }
]

需要用JoltTransformation组件替代ReplaceText组件完成字段映射——原ReplaceText组件通过全局查找替换"_"为空字符串修改字段名,无法满足精准修改指定字段名的需求。
最初编写的基于shift操作的Jolt转换规则如下:

[
  {
    "operation": "shift",
    "spec": {
      "name":"name",
      "sur_name":"surname"
    }
  }
]

该规则存在适配问题:FlowFile被拆分为单条JSON对象处理时,可以正常将sur_name字段映射为surname;但直接传入未拆分的完整数组格式FlowFile时,转换结果返回null。需要实现不拆分FlowFile,直接对整份JSON流文件完成字段转换的效果。

故障原因

原有规则仅适配根节点为单个JSON对象的输入场景,当输入根节点为JSON数组时,规则没有配置数组层级的遍历匹配逻辑,Jolt无法定位到数组内部的字段,因此返回空结果。

解决方法

调整shift规则,增加数组通配匹配逻辑,遍历数组内每个对象执行字段映射即可,不需要拆分FlowFile。修正后的完整Jolt规则如下:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "name": "[&1].name",
        "sur_name": "[&1].surname"
      }
    }
  }
]

规则逻辑说明:

  • 最外层的"*"为通配符,匹配根数组下的每一个元素
  • [&1]表示将当前处理的字段值,写入目标数组中与当前遍历元素索引一致的位置,保证输出数组的元素顺序和输入完全一致
  • 内部字段映射逻辑和拆分场景下的逻辑完全一致:保留name字段原名,将sur_name重命名为surname

以上述示例输入执行转换后,输出结果如下,符合预期:

[
  {
    "name": "Rolf",
    "surname": "ramsfl"
  },
  {
    "name": "Jose",
    "surname": "maxim"
  },
  {
    "name": "Andrei",
    "surname": "alexo"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:06:21