You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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"
          }
        }
      }
    }
  }
]

规则解释

  1. 第一步(映射表生成):将partyDoc转换为以docNumber为键、docT为值的partyDocMap,简化后续的匹配逻辑,避免冗余数据。
  2. 第二步(字段匹配与生成):遍历doc98的每个条目,通过@(4,partyDocMap.&)引用第一步生成的映射表,为匹配到docNumber的条目添加key.docT结构;同时将所有匹配到的docT收集到response.Original.item中。
  3. 第三步(可选去重):使用cardinality操作确保Original.item中的docT不会重复,适用于partyDoc存在相同docNumber的场景。

内容的提问来源于stack exchange,提问作者Madhavi kurabalakota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:24:55