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

请求修正NiFi中JOLTTransformJson的JSON转换规格

JOLTTransformJson 多场景JSON转换规格修正

我在NiFi中使用JOLTTransformJson处理器,输入JSON存在以下4种格式,且遵循规则:

  • 单个JSON对象的属性数量可多可少
  • 顶层数组包含的对象数量可多可少
  • 数组内每个对象的属性结构一致

输入示例

[
  {
    "a": "1"
  }
]
[
  {
    "a": "1",
    "b": "2"
  }
]
[
  {
    "a": "1"
  },
  {
    "a": "3"
  }
]
[
  {
    "a": "1",
    "b": "2"
  },
  {
    "a": "3",
    "b": "4"
  }
]

原转换规格(存在问题)

原规格在多对象/多属性场景下会出现属性值数组化的错误输出:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "$": "[#2].fieldName",
          "@": "[#2].fieldValue"
        }
      }
    }
  }
]

修正后的JOLT转换规格

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "$": "[#3].[#2].fieldName",
          "@": "[#3].[#2].fieldValue"
        }
      }
    }
  }
]

修正逻辑

原规格仅用[#2]定位顶层数组索引,导致同一对象下的多个属性被合并到同一位置的fieldName/fieldValue中,形成数组。修正后:

  • [#3]锁定顶层数组的对象索引,确保每个源对象对应输出数组中的一个子数组
  • [#2]锁定当前属性在源对象内的顺序位置,让每个属性单独生成一个包含fieldName和fieldValue的对象

输出示例

以第四种输入为例,转换后输出:

[
  [
    {
      "fieldName": "a",
      "fieldValue": "1"
    },
    {
      "fieldName": "b",
      "fieldValue": "2"
    }
  ],
  [
    {
      "fieldName": "a",
      "fieldValue": "3"
    },
    {
      "fieldName": "b",
      "fieldValue": "4"
    }
  ]
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:41:16