嵌套数组结构的Jolt Spec转换优化问题(续)
Jolt嵌套数组展开修正方案
问题场景
现有JSON数据:
{"Product": [{"id": 123,"name": "foo","ProductCharge": [{"aboveAmount": 0,"chargeType": "ABC","chargeValueType": "PERCENT","frequency": 1,"feeRate": [{"bandNumber": 1,"rate": 0.6},{"bandNumber": 2,"rate": 1.7}]},{"aboveAmount": 0,"chargeType": "DEF","chargeValueType": "DECIMAL","frequency": 2,"feeRate": [{"bandNumber": 1,"rate": 0.75},{"bandNumber": 2,"rate": -0.55}]}]}]}
需要将每个ProductCharge对象与其内部的feeRate数组元素展开,每个feeRate对应一个包含原ProductCharge字段的新对象,期望输出:
{"Product": [{"id": 123,"name": "foo","ProductCharge": [{"aboveAmount": 0,"chargeType": "ABC","chargeValueType": "PERCENT","frequency": 1,"bandNumber": 1,"rate": 0.6},{"aboveAmount": 0,"chargeType": "ABC","chargeValueType": "PERCENT","frequency": 1,"bandNumber": 2,"rate": 1.7},{"aboveAmount": 0,"chargeType": "DEF","chargeValueType": "DECIMAL","frequency": 2,"bandNumber": 1,"rate": 0.75},{"aboveAmount": 0,"chargeType": "DEF","chargeValueType": "DECIMAL","frequency": 2,"bandNumber": 2,"rate": -0.55}]}]}
原Jolt Spec存在问题:aboveAmount、chargeType等字段仅取自第一个ProductCharge对象,无法正确关联对应feeRate所属的ProductCharge字段值。
原错误Spec:
[{"operation": "shift","spec": {"Product": {"*": {"*": "&2.&","ProductCharge": {"0": {"*": "&4.&2.Others.&","feeRate": {"*": {"*": "&6.&4.&2.&3_&1.&"}}},"*": {"feeRate": {"*": {"*": "&6.&4.&2.&3_&1.&"}}}}}}},{"operation": "shift","spec": {"Product": {"*": "&1[0].&","ProductCharge": {"feeRate": {"*": {"@": "&4[0].&3.[#2]","@2,Others": {"*": "&5[0].&4.[#3].&"}}}}}}]
修正后的Jolt Spec
[ { "operation": "shift", "spec": { "Product": { "*": { "*": "&2.&1.&", "ProductCharge": { "*": { "feeRate": { "*": { "@2,aboveAmount": "&6.&5.&3.[#2].aboveAmount", "@2,chargeType": "&6.&5.&3.[#2].chargeType", "@2,chargeValueType": "&6.&5.&3.[#2].chargeValueType", "@2,frequency": "&6.&5.&3.[#2].frequency", "*": "&6.&5.&3.[#2].&" } } } } } } } } ]
方案说明
- 单次
shift操作完成所有映射:- 用
&6.&5.&3.[#2]定位到最终的Product[0].ProductCharge数组位置,#2表示当前feeRate元素的索引,确保每个feeRate对应独立的数组项。 - 通过
@2,字段名向上两层(当前ProductCharge对象)获取对应字段值,保证每个展开的对象都关联自身所属的ProductCharge字段,彻底解决原方案中字段关联错误的问题。
- 用
内容的提问来源于stack exchange,提问作者Mahesh Gopalan
相关产品推荐
相关产品推荐

