You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

NiFi中EvaluateJson/AttributesToJson输出Null值的实现问题

解决NiFi中AttributesToJSON无法输出Null值的问题

我之前在NiFi里处理JSON属性转内容时也踩过同样的坑,AttributesToJSON确实对null值的处理不太友好,给你几个亲测有效的解决方案:

方案一:用JoltTransformJSON替代AttributesToJSON

Jolt对空值和null的支持比AttributesToJSON灵活得多,完全可以满足你的需求:

  1. 保持原步骤:通过EvaluateJSONPath把$.TEST_DATE提取为属性test-date
  2. 添加JoltTransformJSON处理器,设置Jolt规格为:
{
  "test-date": "${test-date}"
}

test-date属性为null或者不存在时,Jolt会直接生成JSON原生的null值,而不是字符串"null"或者空字符串,完美符合预期。

方案二:用ExecuteScript手动构建JSON(Groovy示例)

如果需要更自定义的逻辑,用ExecuteScript写个简单的脚本就能精准控制null值输出:
添加ExecuteScript处理器,选择Groovy语言,写入以下脚本:

import groovy.json.JsonBuilder

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

// 获取test-date属性
def testDateAttr = flowFile.getAttribute('test-date')
// 构建JSON对象,属性为空时设置为null
def jsonOutput = new JsonBuilder()
jsonOutput {
    'test-date' testDateAttr ?: null
}

// 将JSON写入流文件内容
flowFile = session.write(flowFile, { out ->
    out.write(jsonOutput.toString().getBytes('UTF-8'))
} as OutputStreamCallback)

session.transfer(flowFile, REL_SUCCESS)

这个脚本会自动判断test-date属性的状态,只要属性是空或者null,就会在JSON中输出原生的null类型。

方案三:优化ReplaceText的正则表达式(降低风险)

如果你暂时不想换处理器,可以优化正则来减少误替换的概率:

  1. 先用AttributesToJSON生成初始JSON内容
  2. 添加ReplaceText处理器,设置:
    • 搜索正则:"test-date":\s*(""|"null")
    • 替换值:"test-date": null
    • 匹配模式:Entire text(根据你的JSON结构选择,单行JSON用这个更精准)
      这个正则只会精准匹配test-date字段的空字符串或"null"字符串,替换成原生null,比泛泛的正则安全很多。

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

火山引擎 最新活动