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

如何编写兼容单元素与元素数组的JOLT Transform规范?

统一JOLT Spec处理数组/单个元素输入

我调用的API返回的数据中,rating字段存在两种格式:可能是包含多个对象的数组,也可能是单个对象。目前我有两个分别对应这两种情况的JOLT转换规则,但需要一个统一的Spec来处理两种输入,输出结构完全一致。


输入1(数组格式)

{
  "rating": [
    {
      "primary-value": 3,
      "id": 1
    },
    {
      "quality-value": 3,
      "id": 2
    }
  ]
}

原对应Spec

[
  {
    "operation": "shift",
    "spec": {
      "rating": {
        "*": {
          "*": "out[&1].fields.&"
        }
      }
    }
  }
]

原输出1

{
  "out": [
    {
      "fields": {
        "primary-value": 3,
        "id": 1
      }
    },
    {
      "fields": {
        "quality-value": 3,
        "id": 2
      }
    }
  ]
}

输入2(单个对象格式)

{
  "rating": {
    "primary-value": 3,
    "id": 1
  }
}

原对应Spec

[
  {
    "operation": "shift",
    "spec": {
      "rating": {
        "*": "out[0].fields.&"
      }
    }
  }
]

期望输出2

{
  "out": [
    {
      "fields": {
        "primary-value": 3,
        "id": 1
      }
    }
  ]
}

统一JOLT Spec实现

可行,只需要先将rating字段统一转换为数组格式,再复用原数组处理逻辑即可,完整Spec如下:

[
  // 第一步:将rating统一转为数组(单个对象自动包装为数组)
  {
    "operation": "shift",
    "spec": {
      "rating": {
        "*": "rating[&1]",
        "@": "rating[0]"
      }
    }
  },
  // 第二步:复用原数组处理逻辑生成目标输出
  {
    "operation": "shift",
    "spec": {
      "rating": {
        "*": {
          "*": "out[&1].fields.&"
        }
      }
    }
  }
]

原理说明

  • 第一步shift操作中:
    • "*": "rating[&1]":当rating是数组时,匹配每个数组元素,按原索引存入新的rating数组;
    • "@": "rating[0]":当rating是单个对象时,将整个对象存入rating[0],自动包装为数组;
  • 第二步直接复用原数组处理的Spec,此时无论输入是数组还是单个对象,都已统一为数组格式,输出结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:40:58