如何用Jolt为JSON对象添加基于precedingId的precedingValue字段
问题:通过Jolt为每个对象添加precedingValue字段
输入JSON结构:
{ "1": { "precedingId": "0", "value": "A" }, "2": { "precedingId": "1", "value": "B" }, "3": { "precedingId": "2", "value": "C" } }
期望输出JSON:
{ "1": { "precedingId": "0", "precedingValue" : null, // 因为不存在键为0的对象 "value": "A" }, "2": { "precedingId": "1", "precedingValue" : "A", "value": "B" }, "3": { "precedingId": "2", "precedingValue" : "B", "value": "C" } }
需求说明:每个对象以自身的precedingId作为键,在上一级层级中查找对应对象,若存在则将其value值作为当前对象的precedingValue,不存在则设为null。
实现方案
这个需求完全可以通过Jolt实现,以下是对应的Jolt转换规则:
[ { "operation": "shift", "spec": { "*": { "@": "&", // 保留当前对象的原有字段 "@(2,@{precedingId}.value)": "&.precedingValue" // 向上两级取precedingId对应的value赋值给precedingValue } } }, { "operation": "default", "spec": { "*": { "precedingValue": null // 给不存在precedingValue的字段设置默认值null } } } ]
规则解释:
- Shift操作:
@": "&":将每个键(1、2、3)对应的原始对象完整保留到输出的对应键下。@(2,@{precedingId}.value)": "&.precedingValue":@(2,...)表示向上回溯两级(回到根节点),@{precedingId}动态获取当前对象的precedingId值,然后取根节点下该id对应的对象的value,赋值给当前对象的precedingValue字段。如果找不到对应id的对象,这个字段不会被创建。
- Default操作:遍历每个对象,给没有
precedingValue字段的对象设置默认值null,满足不存在时设为null的需求。
内容的提问来源于stack exchange,提问作者abreal
相关产品推荐
相关产品推荐

