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

如何在NiFi中用JOLT处理器实现JSON对象转数组(避免重复转换)

Apache NiFi JOLT 转换规则实现方案

直接上能满足需求的JOLT转换规则:

[
  {
    "operation": "shift",
    "spec": {
      "_source": {
        "users": {
          "attributes": {
            "organization": {
              // 如果organization下已有0键,直接保留整个organization结构
              "0": {
                "@2": "_source.users.attributes.organization"
              },
              // 如果没有0键,把当前的organization对象包装到0键下
              "*": {
                "@1": "_source.users.attributes.organization.0.&"
              }
            }
          }
        }
      }
    }
  }
]

规则解释

  • shift操作:负责JSON结构的重映射,是JOLT最常用的转换操作。
  • 条件判断逻辑:
    1. 先检查organization下是否存在0键:如果存在,就把整个organization节点(@2表示向上两层取原节点值)直接映射到目标路径,相当于保留原结构。
    2. 如果organization下没有0键,说明是单个对象结构,此时*会匹配单个对象里的所有字段(比如display、objectGUID),然后通过@1取这些字段所在的父节点(也就是原单个organization对象),把它映射到organization.0路径下,完成包装。

测试验证

测试场景1:单个organization对象输入

输入JSON:

{
  "_source": {
    "users": {
      "attributes": {
        "organization": {
          "display": "org1",
          "objectGUID": "7",
          "attributes": {
            "distinguishedName": "ou=org1,OU=BU"
          }
        }
      }
    }
  }
}

转换后输出:

{
  "_source": {
    "users": {
      "attributes": {
        "organization": {
          "0": {
            "display": "org1",
            "objectGUID": "7",
            "attributes": {
              "distinguishedName": "ou=org1,OU=BU"
            }
          }
        }
      }
    }
  }
}

测试场景2:已有索引键的输入

输入JSON:

{
  "_source": {
    "users": {
      "attributes": {
        "organization": {
          "0": {
            "display": "org1",
            "objectGUID": "7"
          },
          "1": {
            "display": "org2",
            "objectGUID": "8"
          }
        }
      }
    }
  }
}

转换后输出和原输入完全一致,保留了多索引的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:20:05