如何在Jolt中基于ID数组与对应对象值修改布尔标志字段?
Jolt转换实现:根据关联对象更新布尔字段值
需求说明
给定包含accessIds数组、对应布尔标志字段及部分ID关联的ACCESS_comment_[ID]对象的JSON,需通过Jolt实现:遍历accessIds中的每个ID,若存在对应的ACCESS_comment_[ID]对象,则将[ID]_ACCESS_comment_isPresent字段值改为"true";若不存在该对象,则保持原字段值不变。
输入JSON
{ "accessIds": [ "2293754", "6660000" ], "2293754_ACCESS_comment_isPresent": "false", "6660000_ACCESS_comment_isPresent": "false", "ACCESS_comment_2293754": { "accessId": "2293754", "commentIsPresent": true, "textValue": "No problems reported." } }
期望输出JSON
{ "2293754_ACCESS_comment_isPresent": "true", "6660000_ACCESS_comment_isPresent": "false" }
Jolt转换规范
[ { "operation": "shift", "spec": { "*_ACCESS_comment_isPresent": "&", "accessIds": { "*": { "@(2,ACCESS_comment_&)": { "#true": "&2_&1_ACCESS_comment_isPresent" } } } } }, { "operation": "remove", "spec": { "accessIds": "", "ACCESS_comment_*": "" } } ]
转换说明
- Shift操作:
- 先保留所有原有的
*_ACCESS_comment_isPresent字段,确保未匹配到关联对象的字段维持初始值 - 遍历
accessIds数组中的每个ID,向上两级查找是否存在ACCESS_comment_[ID]对象;若存在,则生成对应的[ID]_ACCESS_comment_isPresent字段并赋值为"true",利用shift操作的覆盖特性替换原有值
- 先保留所有原有的
- Remove操作:移除输入中不需要的
accessIds数组和ACCESS_comment_*对象,仅保留目标布尔字段
内容的提问来源于stack exchange,提问作者Kaushik
相关产品推荐
相关产品推荐

