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

如何使用NiFi JoltTransformJSON按条件拼接字段生成Address

该需求完全可以通过JoltTransformJSON实现,你需要组合使用shift、modify-overwrite-beta、remove三类Jolt操作即可,以下是完整可用的spec:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "NAME": "[&1].NAME",
        "CITY": "[&1].tempAddressParts[0]",
        "PROV": "[&1].tempAddressParts[1]",
        "POSTALCODE": "[&1].tempPostalCode",
        "DATE": "[&1].DATE",
        "TIME": "[&1].TIME"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "tempAddressParts": "=recursiveDeref",
        "tempBaseAddress": "=join(', ', @(1,tempAddressParts))",
        "tempPostalPart": "=isNull(@(1,tempPostalCode)) ? '' : =concat('Pin: ', @(1,tempPostalCode))",
        "tempFullAddressArr": "=split(',_$_,', =concat(@(1,tempBaseAddress), ',_$_,', @(1,tempPostalPart)))",
        "tempFullAddressArr": "=recursiveDeref",
        "Address": "=join(', ', @(1,tempFullAddressArr))",
        "Address": "=default(@(1,Address), '')"
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      "*": {
        "temp*": ""
      }
    }
  }
]

实现逻辑说明

  1. shift操作阶段:遍历输入数组的每个元素,保留原有NAME、DATE、TIME字段,同时将地址相关的三个字段拆分存入临时变量,方便后续拼接处理。
  2. modify-overwrite-beta操作阶段:
    • 用recursiveDeref函数清理地址部分的null、空字符串值,避免拼接出多余的逗号
    • 先拼接CITY和PROV得到基础地址串
    • 对POSTALCODE做非空判断,非空时拼接Pin: 前缀,为空时返回空字符串
    • 合并基础地址串和处理后的邮编串,再次清理空值后做最终拼接得到Address字段
    • 最后做兜底处理,如果所有地址相关字段都为空,直接将Address设为空字符串
  3. remove操作阶段:删除所有前缀为temp的临时变量,输出最终符合要求的结构。

适配验证

该spec适配你给出的两个测试用例,也支持空数组输入:

  • Aron条目输出的Address为NewYork, NY, Pin: 12345,符合预期
  • Paul条目因POSTALCODE为null,输出的Address为Chicago, BI,符合预期
  • 若CITY、PROV、POSTALCODE全为空,Address字段自动赋值为空字符串
  • 输入为空数组[]时,输出也为空数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:48:04