基于DOC_TYPE/VENDOR/PLANT的Flat JSON转Nested JSON的Jolt配置求助
Jolt转换:基于DOC_TYPE、VENDOR、PLANT实现扁平JSON嵌套
原配置的核心问题是仅以DOC_TYPE作为分组键,未结合VENDOR和PLANT实现完整分组,同时Items数组的索引逻辑错误,导致无法正确聚合同组数据。以下是修正后的Jolt规格:
修正后的Jolt Spec
[ { "operation": "shift", "spec": { "*": { // 用DOC_TYPE+VENDOR+PLANT作为复合分组键,确保三个字段匹配的记录归为一组 "DOC_TYPE": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).&", "VENDOR": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).&", "PLANT": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).&", "RSD": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).&", "SALES_CHANNEL": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).&", "DELIVERY_PRIORITY": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).&", "ORDER_REASON": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).&", // 将行级字段放入Items数组,用[]自动追加元素 "PO_ITEM": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).Items[].&", "MATERIAL": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).Items[].&", "QUANTITY": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).Items[].&", "GR_PROCESSING": "@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT).Items[].&" } } }, { "operation": "modify-overwrite-beta", "spec": { "*": { "Items": { "*": "=recursivelySquashNulls" } } } }, { "operation": "cardinality", "spec": { "*": { "DOC_TYPE": "ONE", "VENDOR": "ONE", "PLANT": "ONE", "RSD": "ONE", "SALES_CHANNEL": "ONE", "DELIVERY_PRIORITY": "ONE", "ORDER_REASON": "ONE" } } }, { "operation": "shift", "spec": { "*": "[]" } } ]
关键修正点说明
- 复合分组键:使用
@(1,DOC_TYPE)_@(1,VENDOR)_@(1,PLANT)作为分组标识,确保DOC_TYPE、VENDOR、PLANT三者完全匹配的记录被聚合到同一组。 - Items数组构建:用
Items[]替代原配置的Items[&1],自动将同组的行级字段追加到数组中,避免索引混乱。 - 字段筛选:仅保留预期输出中的头部字段和行级字段,移除原配置中不必要的
REF_1和HEADER_TEXT(若需保留可添加到头部字段列表)。 - 空值处理:仅对Items数组内的空值进行压缩,避免影响头部字段的保留逻辑。
转换结果
执行上述规格后,输出将与你提供的预期结构完全一致,实现按三个字段分组的嵌套JSON结构。
内容的提问来源于stack exchange,提问作者Thiyagaraj Narayanan
相关产品推荐
相关产品推荐

