如何通过JOLT实现JSON数组指定键保留与空数组补全
JOLT配置解决方案
输入JSON
{ "data": [ { "accessCriterias": [ { "name": "level1", "id": "1234" } ], "userRoleGroups": [ { "name": "all_grp", "id": "456" }, { "name": "read_only_grp", "id": "234" } ], "firstName": "first_name_1" }, { "accessCriterias": [], "userRoleGroups": [], "firstName": "first_name_2" }, { "firstName": "first_name_3" } ], "next": true }
期望输出JSON
{ "data": [ { "firstName": "first_name_1", "userRoleGroups": [ { "name": "all_grp" }, { "name": "read_only_grp" } ], "accessCriterias": [ { "name": "level1" } ] }, { "firstName": "first_name_2", "userRoleGroups": [], "accessCriterias": [] }, { "firstName": "first_name_3", "userRoleGroups": [], "accessCriterias": [] } ], "next": true, "nextOffset": 50 }
转换规则
- 若
userRoleGroups和accessCriterias字段为空数组或不存在,输出中该字段需设为空数组[]; userRoleGroups和accessCriterias仅保留name字段,移除id字段。
原配置问题
原配置仅处理了字段存在性和数组保留,但未对数组内的对象做字段过滤,导致id字段被保留,不符合第二条规则。
正确JOLT配置
[ { "operation": "modify-default-beta", "spec": { "data": { "*": { "userRoleGroups": [], "accessCriterias": [] } } } }, { "operation": "shift", "spec": { "data": { "*": { "firstName": "data[&1].firstName", "userRoleGroups": { "*": { "name": "data[&3].userRoleGroups[&1].name" } }, "accessCriterias": { "*": { "name": "data[&3].accessCriterias[&1].name" } } } }, "next": "next" } }, { "operation": "default", "spec": { "nextOffset": 50 } } ]
配置说明
- modify-default-beta:遍历
data数组的每个元素,确保userRoleGroups和accessCriterias字段存在,不存在则设为空数组,满足第一条规则; - shift:重新构造输出结构,针对
userRoleGroups和accessCriterias数组内的每个对象,仅提取name字段并映射到对应位置,移除id字段; - default:添加默认的
nextOffset字段,值为50。
内容的提问来源于stack exchange,提问作者Avinash Kumar
相关产品推荐
相关产品推荐

