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

Apache NiFi JoltTransformJSON:保留键名中的下划线

嘿,我完全懂你现在的困扰——之前在Apache NiFi里用Jolt做JSON转换时,也踩过类似的“莫名丢下划线”的坑!咱们一步步来排查和解决:

首先得明确一下:你说的是属性"Source"的键名里的下划线丢了,还是**"Source"字段的值**里的下划线不见了?两种场景的解决思路略有不同,我都给你梳理下:

情况1:"Source"键名本身的下划线被移除

比如你原本的输入里有"Source_Field": "value",转换后变成了"SourceField": "value",这大概率是你在Jolt的shift操作里不小心用了会修改键名的规则。

解决方法很简单:在spec里直接用引号明确指定带下划线的键名,不要用任何自动转换键名的逻辑。举个例子:

[
  {
    "operation": "shift",
    "spec": {
      "Source_Field": "Source_Field", // 明确映射,原样保留下划线
      "*": "&" // 其他字段也原样保留
    }
  }
]

Jolt默认不会主动修改键名的下划线,只要你不额外加键名转换的规则,就能稳稳保留。

情况2:"Source"字段的值里的下划线消失

比如输入里"Source": "USER_ID",转换后变成"Source": "USERID",这十有八九是你的Jolt表达式里加了字符串处理操作,意外把下划线替换掉了。

比如你可能不小心写了这样的modify操作:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "Source": "=replace(@(1,Source), '_', '')" // 这里主动把下划线替换成空了!
    }
  }
]

解决方法就是:

  • 如果不需要修改Source的值,直接删掉这个modify操作;
  • 如果需要做其他字符串处理,调整replace的正则表达式,比如只替换特定位置的下划线,而不是全部。

给你一个完整的正确示例:
输入JSON:

{
  "Source": "USER_ID",
  "OtherData": "test_value"
}

Jolt表达式(完全保留所有下划线):

[
  {
    "operation": "shift",
    "spec": {
      "*": "&" // 所有字段原样映射,包括值里的下划线
    }
  }
]

转换后的输出会完美保留所有下划线:

{
  "Source": "USER_ID",
  "OtherData": "test_value"
}

核心原则就是:只要你不对Source字段(不管是键名还是值)做任何主动移除下划线的操作,Jolt都会帮你原样保留。如果还是有问题,可以检查下是不是其他转换步骤(比如split、merge)里不小心把下划线当成分隔符了哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:03:54