Jolt规格优化:处理含/不含数组的JSON,补全缺失元素
Jolt 转换解决方案:兼容含/不含PC13数组的JSON数据
问题说明
需实现JSON转换逻辑:
- 若条目含
PC13数组,则展平数组元素并关联父级字段 - 若条目不含
PC13数组,则直接保留父级数据 - 需避免遗漏无
PC13的条目(如parent2、parent6),同时防止父级数据重复
输入示例
[ {"parentId": "parent1", "parentField": "val1", "PC13": [{"id": "pc1", "field": "a"}, {"id": "pc2", "field": "b"}]}, {"parentId": "parent2", "parentField": "val2"}, {"parentId": "parent3", "parentField": "val3", "PC13": [{"id": "pc3", "field": "c"}]}, {"parentId": "parent4", "parentField": "val4", "PC13": [{"id": "pc4", "field": "d"}, {"id": "pc5", "field": "e"}, {"id": "pc6", "field": "f"}]}, {"parentId": "parent5", "parentField": "val5", "PC13": [{"id": "pc7", "field": "g"}]}, {"parentId": "parent6", "parentField": "val6"}, {"parentId": "parent7", "parentField": "val7", "PC13": [{"id": "pc8", "field": "h"}, {"id": "pc9", "field": "i"}]}, {"parentId": "parent8", "parentField": "val8", "PC13": [{"id": "pc10", "field": "j"}]}, {"parentId": "parent9", "parentField": "val9"}, {"parentId": "parent10", "parentField": "val10", "PC13": [{"id": "pc11", "field": "k"}]}, {"parentId": "parent11", "parentField": "val11"} ]
正确Jolt转换规格
[ { "operation": "shift", "spec": { "*": { // 处理含PC13数组的条目:将数组元素与父字段关联 "PC13": { "*": { "@2,parentId": "tmp.[&3].&1.parentId", "@2,parentField": "tmp.[&3].&1.parentField", "*": "tmp.[&3].&1.&" } }, // 处理不含PC13数组的条目:将父级数据存入临时结构 "$": { "@(1,PC13)": { "null": { "@(2,parentId)": "tmp.[&3].parentId", "@(2,parentField)": "tmp.[&3].parentField" } } } } } }, { "operation": "shift", "spec": { "tmp": { "*": { // 展开临时结构中的所有条目为一维数组 "*": { "@": "[]" } } } } }, { "operation": "remove", "spec": { "*": { "PC13": "" // 清理残留的PC13字段 } } } ]
转换逻辑说明
- 第一个Shift操作:创建临时结构
tmp,为每个原条目分配索引。含PC13的条目会在对应索引下生成多个子对象(对应数组元素+父字段);不含PC13的条目会在对应索引下生成单个父对象。 - 第二个Shift操作:将
tmp中的所有子对象展开为一维数组,确保所有原条目(含/不含PC13)都被正确保留,最终得到11个元素的输出。 - Remove操作:移除转换过程中可能残留的
PC13字段,保证输出结构整洁。
预期输出示例
输出将包含11个条目:
- parent1对应2个展平后的条目
- parent2对应1个父级条目
- parent3对应1个展平后的条目
- ...
- parent6对应1个父级条目
- ...
- parent11对应1个父级条目
内容的提问来源于stack exchange,提问作者tabassum mahanaz
相关产品推荐
相关产品推荐

