请求基于公共键合并JSON数组的JOLT转换规则
JOLT转换方案:将候选人员合并至对应工地
输入示例
[ { "worksite_candidates": { "worksite_id": "12345", "worker": { "id": "1232", "managerId": "09" }, "openDate": "2022-10-14", "finalDate": "2022-12-16" } }, { "worksite_candidates": { "worksite_id": "12345", "worker": { "id": "1233", "managerId": "08" }, "openDate": "", "finalDate": "" } }, { "worksite_candidates": { "worksite_id": "12347", "worker": { "id": "1234", "managerId": "09" }, "openDate": "2022-11-10", "finalDate": "2022-11-12" } }, { "worksite": { "id": "12345", "status": "2", "dayid": "2", "vacancys": "1", "countryid": "2", "arenaid": "8" } }, { "worksite": { "id": "12347", "status": "2", "dayid": "2", "vacancys": "1", "countryid": "2", "arenaid": "8" } } ]
期望输出
[ { "worksite": { "id": "12345", "status": "2", "dayid": "2", "vacancys": "1", "countryid": "2", "arenaid": "8", "Candidates": [ { "worker": { "id": "1232", "managerId": "09" }, "openDate": "2022-10-14", "finalDate": "2022-12-16" }, { "worker": { "id": "1233", "managerId": "08" }, "openDate": "", "finalDate": "" } ] } }, { "worksite": { "id": "12347", "status": "2", "dayid": "2", "vacancys": "1", "countryid": "2", "arenaid": "8", "Candidates": [ { "worker": { "id": "1234", "managerId": "09" }, "openDate": "2022-11-10", "finalDate": "2022-11-12" } ] } } ]
JOLT转换规则
[ // 第一步:按worksite_id分组,关联工地与对应候选人员 { "operation": "shift", "spec": { "*": { "worksite": { "id": "grouped.&1.id", "*": "grouped.&1.&" }, "worksite_candidates": { "worksite_id": { "@(2,worker)": "grouped.&1.Candidates[#2].worker", "@(2,openDate)": "grouped.&1.Candidates[#2].openDate", "@(2,finalDate)": "grouped.&1.Candidates[#2].finalDate" } } } } }, // 第二步:将分组结构整理为目标数组格式 { "operation": "shift", "spec": { "grouped": { "*": { "id": "[#2].worksite.id", "*": "[#2].worksite.&", "Candidates": "[#2].worksite.Candidates" } } } }, // 第三步:确保Candidates始终为数组(避免单个候选时转为对象) { "operation": "cardinality", "spec": { "*": { "worksite": { "Candidates": "MANY" } } } } ]
规则说明
- 第一步(shift):把工地和候选人员按
worksite_id(工地用自身id,候选用worksite_id)归类到grouped对象下,同时提取候选的核心字段存入对应ID的Candidates数组。 - 第二步(shift):将
grouped下的键值对转换为数组元素,每个元素包裹完整的worksite对象,并嵌套对应的Candidates数组。 - 第三步(cardinality):强制
Candidates保持数组类型,避免单个候选时结构异常。
内容的提问来源于stack exchange,提问作者Sinuers
相关产品推荐
相关产品推荐

