如何在Jolt中为嵌套对象添加字段并关联docT与docNumber
Jolt转换问题:为doc98项匹配并添加key.docT字段
问题说明
需要从Party.retailDemographic.partyDoc中匹配doc98里每个docNumber对应的docT,并以key.docT的格式关联到doc98对应项中。筛选逻辑为:按docNumber对partyDoc元素做透视,仅保留与doc98.docNumber匹配的条目。当前编写的Jolt规则输出中,doc98项缺失key字段,无法得到预期结果。
输入数据
{"Party": {"retailDemographic": {"partyDoc": [{"docT": "01","docNumber": "1234562","isPrimaryDoc": false},{"docT": "02","docNumber": "546987","isPrimaryDoc": false}]}},"doc98": [{"docNumber": "1234562"},{"docNumber": "5469871"},{"docNumber": "546987"}]}
预期输出
{"response": {"doc98": [{"docNumber": "1234562","key":{"docT": "01"}},{"docNumber": "5469871"},{"docNumber": "546987","key":{"docT": "02"}}],"Original": {"item": [{"docT": "01"},{"docT": "02"}]}}}
当前输出
{"response": {"doc98": [{"docNumber": "1234562"},{"docNumber": "5469871"},{"docNumber": "546987"}],"Original": {"item": [{"docT": "01"},{"docT": "02"}]}}}
现有Jolt规则
[{"operation": "shift","spec": {"Party": {"retailDemographic": {"partyDoc": {"*": {"docNumber": {"*": {"@2": "partyDocByNumber.&1"}}}}}},"doc98": "doc98"}},{"operation": "shift","spec": {"doc98": {"@": "response.doc98","*": {"docNumber": {"*": {"@(4,partyDocByNumber.&.docT)": "response.Original.item[].docT"}}}}}}]
修正后的Jolt规则及解释
修正规则
[ // 第一步:将partyDoc转换为docNumber到docT的映射表 { "operation": "shift", "spec": { "Party": { "retailDemographic": { "partyDoc": { "*": { "docNumber": { "*": { "@2.docT": "partyDocMap.&1" } } } } } }, "doc98": "doc98" } }, // 第二步:为doc98添加key字段,同时生成Original部分 { "operation": "shift", "spec": { "doc98": { "*": { "docNumber": { "*": { // 保留原docNumber字段 "@": "response.doc98[&3].docNumber", // 匹配映射表中的docT,生成key结构 "@(4,partyDocMap.&)": "response.doc98[&3].key.docT", // 收集匹配到的docT到Original.item "@(4,partyDocMap.&)": "response.Original.item[].docT" } } } } } }, // 第三步:去重Original中的docT(可选,避免重复条目) { "operation": "cardinality", "spec": { "response": { "Original": { "item": { "*": "ONE" } } } } } ]
规则解释
- 第一步(映射表生成):将
partyDoc转换为以docNumber为键、docT为值的partyDocMap,简化后续的匹配逻辑,避免冗余数据。 - 第二步(字段匹配与生成):遍历
doc98的每个条目,通过@(4,partyDocMap.&)引用第一步生成的映射表,为匹配到docNumber的条目添加key.docT结构;同时将所有匹配到的docT收集到response.Original.item中。 - 第三步(可选去重):使用
cardinality操作确保Original.item中的docT不会重复,适用于partyDoc存在相同docNumber的场景。
内容的提问来源于stack exchange,提问作者Madhavi kurabalakota
相关产品推荐
相关产品推荐

