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

如何在NiFi中将JSON数组转换为换行分隔JSON格式

问题场景

需要将单批次包含超2000个字段的JSON数组格式文件,转换为换行分隔的JSON块格式,已知SplitJSON拆分+MergeContent合并的实现方案,寻求无需拆分、合并原文件的替代方案。

输入示例

输入为标准JSON数组结构:

[
  {
    "Test1": 1,
    "Test2": 2,
    "Test3": 3
  },
  {
    "Test4": 4,
    "Test5": 5
  },
  {
    "Test6": 6,
    "Test7": 7,
    "Test8": 8
  },
  {
    "Test9": 9,
    "Test10": 10
  }
]

预期输出

移除数组外层方括号,删除JSON对象之间的分隔逗号,每个JSON对象独立成块按行分隔:

{
  "Test1": 1,
  "Test2": 2,
  "Test3": 3
}
{
  "Test4": 4,
  "Test5": 5
}
{
  "Test6": 6,
  "Test7": 7,
  "Test8": 8
}
{
  "Test9": 9,
  "Test10": 10
}

现有进展

已通过ReplaceText处理器实现外层方括号[ ]的移除,但无法正确处理大括号之间的分隔逗号,无法生成合规输出。

可直接落地的无拆分实现方案

所有方案均在单流文件内完成处理,无拆分、合并开销,适配大文件处理场景:

  • 方案1:ReplaceText正则替换(性能最优,零额外依赖)
    直接在现有ReplaceText处理器上配置两条顺序执行的正则替换规则即可,不需要新增其他处理器:
    1. 移除首尾方括号:搜索值填^\s*\[|\]\s*$,替换值留空,匹配模式选择「正则表达式」,替换策略选「预置替换」
    2. 处理对象间分隔逗号:搜索值填\}(\s*),(\s*)\{,替换值填}\n\n{,匹配模式选择「正则表达式」

    该正则只会匹配两个JSON对象闭合}和起始{之间的逗号,JSON对象内部字段后的逗号后永远跟的是字段键的双引号,不会匹配到{,因此完全不会误删对象内部的逗号,适配格式化JSON数组的处理场景,性能远高于拆分合并方案。
    如果源JSON是压缩无换行格式(如[{"a":1},{"b":2}]),将第二步替换值调整为}\n{即可。

  • 方案2:JoltTransformJSON转换
    不想用正则的话可以用Jolt处理器完成结构转换,配置如下Jolt规范即可将数组打平为平级对象集合:
    [
      {
        "operation": "shift",
        "spec": {
          "*": "&"
        }
      }
    ]
    
    转换后再用简单的字符替换移除首尾残留的数组包裹符号即可,全程单流文件处理。
  • 方案3:ExecuteScript自定义脚本处理
    需要更灵活的容错能力时,可以用Groovy脚本在处理器内做流式扫描:逐字符读取JSON内容,维护大括号嵌套层级计数器,当层级从1归0时,跳过后续出现的逗号和空白字符,写入两个换行符后继续读取后续内容即可,内存占用极低,支持GB级超大JSON文件处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:03:29