如何在Jolt转换中为数组的复杂元素添加默认值
为Jolt数组中每个元素的缺失属性设置null默认值
输入数据
{ "INS-2000_loop": [ { "HD-2300_loop": [ { "COB-2320_loop": [ { "COB_01": "11", "COB_02": "12", "COB_03": "13" }, { "COB_01": "21", "COB_03": "23" }, { "COB_01": "31", "COB_02": "32" }, { "COB_02": "42", "COB_03": "43" } ] } ] } ] }
当前Jolt Spec
[ { "operation": "shift", "spec": { "*": { "*": { "HD-2300_loop": { "*": { "COB-2320_loop": { "*": { "COB_01": "L2320.[&1].x", "COB_02": "L2320.[&1].y", "COB_03": "L2320.[&1].z" } } } } } } } }, { "operation": "default", "spec": { "L2320": [ { "x": null, "y": null, "z": null } ] } } ]
当前执行结果
{ "L2320": [ { "x": "11", "y": "12", "z": "13" }, { "x": "21", "z": "23" }, { "x": "31", "y": "32" }, { "y": "42", "z": "43" } ] }
期望结果
{ "L2320": [ { "x": "11", "y": "12", "z": "13" }, { "x": "21", "y": null, "z": "23" }, { "x": "31", "y": "32", "z": null }, { "x": null, "y": "42", "z": "43" } ] }
解决方案
可以通过调整default操作的目标路径,针对数组中的每个元素设置默认值,而不是给整个数组设置默认元素。修改后的Jolt Spec如下:
[ { "operation": "shift", "spec": { "*": { "*": { "HD-2300_loop": { "*": { "COB-2320_loop": { "*": { "COB_01": "L2320.[&1].x", "COB_02": "L2320.[&1].y", "COB_03": "L2320.[&1].z" } } } } } } } }, { "operation": "default", "spec": { "L2320": { "*": { "x": null, "y": null, "z": null } } } } ]
说明
- 原
default操作的路径是"L2320": [{"x": null, ...}],这只会在L2320数组为空时添加一个默认元素,不会对已有的数组元素补全属性。 - 修改后的路径
"L2320": {"*": {"x": null, ...}}中,*表示匹配L2320数组里的每一个元素,会自动为每个缺失x/y/z属性的元素补上null值,完全符合期望结果,且适配任意数量的数组元素。
内容的提问来源于stack exchange,提问作者Abhai Raj Llewellyn
相关产品推荐
相关产品推荐

