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

如何使用ReplaceText或其他处理器将非标准JSON转换为标准JSON

针对非标准JSON转换的NiFi处理器替代方案

除了你正在尝试的ReplaceText,这些处理器也能高效完成需求:

JoltTransformJSON

适合结构化的JSON格式修正与字段修改,建议先通过一次简单替换(比如ReplaceText)把[cpu|usage,mem|usage,disk|usage]转为["cpu|usage","mem|usage","disk|usage"],再用以下Jolt规范替换usage为usages:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "Keyboard": "=replace(@(1), 'usage', 'usages')"
    }
  }
]

如果想一步完成,也可以结合字符串拼接的Jolt操作,但先修正数组引号会更稳定。

ExecuteScript

用脚本实现全流程处理,灵活性拉满。比如Groovy脚本示例:

def flowFile = session.get()
if (!flowFile) return

flowFile = session.write(flowFile, { inputStream, outputStream ->
    // 移除外层<p>标签
    def rawContent = inputStream.text.replaceAll(/<p>(.*)<\/p>/, '$1')
    // 修正数组元素的引号
    def quotedContent = rawContent.replace(/\[([^\]]+)\]/, { match ->
        def elements = match[1].split(',').collect { "\"${it.trim()}\"" }.join(',')
        return "[${elements}]"
    })
    // 解析并修改字段值
    def jsonObj = new groovy.json.JsonSlurper().parseText(quotedContent)
    jsonObj.Keyboard = jsonObj.Keyboard.collect { it.replace('usage', 'usages') }
    // 输出标准JSON
    outputStream.write(new groovy.json.JsonBuilder(jsonObj).toBytes())
} as StreamCallback)

session.transfer(flowFile, REL_SUCCESS)

脚本可以一次性完成标签移除、数组格式修正、字段值替换。

UpdateRecord + 适配型Reader/Writer

如果能先让NiFi识别非标准JSON,就可以用UpdateRecord做字段修改:

  1. 先用ReplaceText给Keyboard数组的元素加上引号,把非标准数组转为标准格式
  2. 用JsonTreeReader读取JSON内容
  3. 在UpdateRecord中,给Keyboard字段设置表达式:${field.value:replace('usage', 'usages')}
  4. 最后用JsonRecordSetWriter输出标准JSON

补充:ReplaceText的优化用法

如果你继续用ReplaceText,可以分两步处理:

  • 第一步处理器:匹配正则\[([^\]]+)\],替换为["$1"],再添加额外替换规则,把,替换为",",给数组元素补上引号
  • 第二步处理器:匹配usage,替换为usages,完成最终修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:50:07