Jolt实现JSON转换时Response属性未填充到Items数组求助
问题原因
你编写的Jolt规则存在几处路径引用错误,直接导致Response节点下的属性无法正确填充到输出结果:
- 遍历Items数组元素时使用
@GrNumber取值,仅会在当前遍历的Item对象范围内查找对应字段,根本读不到外层Response节点下的属性 - 给Response下GrNumber字段配置的映射路径为
Items.GrNumber,会把该字段挂载为Items数组的同级属性,没法注入到数组内的每个子对象中 - 数组路径写法不统一,混用
Items.[&1]和Items[&1]两种格式,容易触发路径匹配异常
可直接使用的Jolt转换规则
[ { "operation": "shift", "spec": { "RegDate": "RegDate", "Items": { "*": { "LineItem": "Items[&1].LineItem", "PoNumber": "Items[&1].PoNumber", "PoItem": "Items[&1].PoItem", "@(2,Response.GrNumber)": "Items[&1].GrNumber", "@(2,Response.GrYear)": "Items[&1].GrYear" } } } } ]
规则说明
- 遍历Items数组时,使用
@(回溯层级, 目标路径)语法向上回溯2层到达根节点,直接读取Response节点下的公共字段,注入到当前遍历到的数组子对象中,不需要单独为Response节点编写映射逻辑 - 统一使用
Items[&1].字段名的标准数组路径写法,避免多余的点号导致路径解析错误 - 规则执行后会自动将GrNumber、GrYear两个字段追加到Items数组的每一个子对象下,如果你需要调整输出字段(比如移除部分元素的LineItem),只需要删除对应字段的映射行即可。
内容的提问来源于stack exchange,提问作者Athar Iqbal
相关产品推荐
相关产品推荐

