Jolt转换需求:子对象全为null时将父对象设为空对象
Jolt转换方案:处理空地址对象需求
需求说明
源JSON:
{ "name": "Andrew", "address": { "permanentAddress": null, "temporaryAddress": null } }
期望转换后的目标JSON:
{ "person": { "name": "Andrew", "address": {} } }
核心要求:当permanentAddress和temporaryAddress全为null时,把person.address设为空对象,不能保留带null值的字段。
原方案问题
之前用的shift操作仅做结构映射,会原样保留所有字段(包括null值),达不到过滤空字段的效果。
正确转换规则
需要组合shift和modify-overwrite-beta两个操作,先完成结构映射再清理null字段:
[ { "operation": "shift", "spec": { "name": "person.name", "address": "person.address" } }, { "operation": "modify-overwrite-beta", "spec": { "person": { "address": "=recursivelySquashNulls" } } } ]
规则说明
- shift步骤:完成基础结构映射,将源数据的
name对应到person.name,address整体映射到person.address。 - modify-overwrite-beta步骤:通过
recursivelySquashNulls函数递归移除person.address下所有值为null的字段。如果所有子字段都被清理,address会自动变成空对象。
转换结果
运行上述规则后,输出完全符合目标要求:
{ "person": { "name": "Andrew", "address": {} } }
内容的提问来源于stack exchange,提问作者Ajinkya
相关产品推荐
相关产品推荐

