编写JOLT规格移除数组组元素中的空字符串与空格元素
JOLT转换解决方案:移除数组中空值/空格元素
问题描述
需通过JOLT规格移除数组中msgCode和msgDefinition均为空字符串或空格的元素,仅保留有效记录。
输入示例
{ "C1-RECORD": { "C1-ACTIONS": { "C1-MESSAGES": [ { "C1-MSG-CODE": "UPT", "C1-MSG-DEFINITION": "Update task" }, { "C1-MSG-CODE": "DEL", "C1-MSG-DEFINITION": "Delete task" }, { "C1-MSG-CODE": " ", "C1-MSG-DEFINITION": " " }, { "C1-MSG-CODE": " ", "C1-MSG-DEFINITION": " " } ] } } }
正确JOLT转换规格
[ { "operation": "shift", "spec": { "C1-RECORD": { "C1-ACTIONS": { "C1-MESSAGES": { "*": { "C1-MSG-CODE": { " ": null, "*": { "@2,C1-MSG-CODE": "actions.messages[#3].msgCode", "@2,C1-MSG-DEFINITION": "actions.messages[#3].msgDefinition" } } } } } } } } ]
规格说明
- 利用
shift操作的条件匹配逻辑:先判断C1-MSG-CODE是否为空格,若是则设为null直接丢弃;若不是,则通过@2回溯到当前数组元素层级,提取对应的两个字段值。 [#3]用于构建新的数组索引,确保有效元素按原有顺序存入actions.messages数组,保持对象结构不被打乱。- 示例中无效元素的两个字段均为空格,因此仅过滤
C1-MSG-CODE即可覆盖需求。
输出结果
{ "actions": { "messages": [ { "msgCode": "UPT", "msgDefinition": "Update task" }, { "msgCode": "DEL", "msgDefinition": "Delete task" } ] } }
补充:双字段严格过滤
若需要确保msgCode和msgDefinition都不为空格才保留元素,可使用以下规格:
[ { "operation": "shift", "spec": { "C1-RECORD": { "C1-ACTIONS": { "C1-MESSAGES": { "*": { "C1-MSG-CODE": { " ": null, "*": { "@1,C1-MSG-DEFINITION": { " ": null, "*": { "@3,C1-MSG-CODE": "actions.messages[#4].msgCode", "@3,C1-MSG-DEFINITION": "actions.messages[#4].msgDefinition" } } } } } } } } } } ]
内容的提问来源于stack exchange,提问作者Kenny Li
相关产品推荐
相关产品推荐

