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

Jolt执行shift转换时如何避免自动生成数组,保留最后匹配值?

Jolt多字段映射同一键避免生成数组的配置方案

现有输入JSON如下:

{
  "foo": "bar",
  "tuna": "marlin"
}

最初使用的Jolt spec配置如下:

[
  {
    "operation": "shift",
    "spec": {
      "foo": "baz",
      "tuna": "baz"
    }
  }
]

转换后输出的baz字段为数组类型,不符合需求:

{
  "baz" : [ "bar", "marlin" ]
}

预期实现:baz字段取最后一个匹配的字段值,不生成数组,效果如下:

{
  "baz" : "marlin"
}

解决方案

出现数组的原因是shift操作的默认规则:当多个输入字段映射到同一个输出键时,会自动将所有匹配值打包为数组。要实现后值覆盖前值的效果,可在原配置基础上新增一步modify-overwrite-beta操作,提取数组最后一个元素即可,调整后的spec如下:

[
  {
    "operation": "shift",
    "spec": {
      "foo": "baz",
      "tuna": "baz"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "baz": "=lastElement(@(1,baz))"
    }
  }
]

逻辑说明

  1. 第一步shift操作保留原有映射逻辑,将foo和tuna的取值汇总到baz字段生成数组
  2. 第二步modify-overwrite-beta操作调用Jolt内置的lastElement函数,读取baz数组的最后一个元素,直接覆盖原数组类型的baz值,最终得到单值类型的输出结果。如果业务场景中tuna优先级高于foo,该配置同时适配tuna不存在、自动取foo值的场景。

内容的提问来源于stack exchange,提问作者Markus Ridziauskas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:36:00