JOLT中使用charAt()提取指定位置字符返回null的问题
JOLT配置输出null的解决方法
问题场景
使用给定的JOLT转换规格处理输入数据时,输出结果为null,期望从输入的A字段字符串中提取索引为2的字符(即第3个字符),得到指定的输出结构。
原配置与数据
- 错误的JOLT Spec:
[ { "operation": "shift", "spec": { "f($;$ = $.A.charAt(2) )": "charAt" } } ]
- 输入数据:
[ { "A": "Active" } ]
- 期望输出:
{ "charAt": "t" }
错误原因
原Spec的写法完全不符合JOLT的语法规则:
- JOLT的
shift操作仅负责数据结构的重排,不支持直接嵌入JavaScript的charAt()方法语法。 - 配置中的
"f($;$ = $.A.charAt(2))"是无效的匹配键,无法匹配到输入中的任何数据,因此输出为null。
正确的JOLT配置
要实现字符串字符提取,需要使用JOLT的modify-overwrite-beta操作(支持字符串处理函数),结合shift完成结构调整,具体配置如下:
[ { "operation": "modify-overwrite-beta", "spec": { "*": { // 从A字段的字符串中截取索引2到3的子串(左闭右开),即第3个字符 "charAt": "=substring(@(1,A),2,3)" } } }, { "operation": "shift", "spec": { "*": { // 将数组元素中的charAt字段提取到根节点 "charAt": "charAt" } } } ]
验证结果
将上述正确配置应用于输入数据后,输出与期望完全一致:
{ "charAt": "t" }
内容的提问来源于stack exchange,提问作者Alexa
相关产品推荐
相关产品推荐

