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

如何使用JOLT按columnIndex值对数组元素进行分组

JOLT按columnIndex字段分组数据转换解决方案

需求

按columnIndex字段的值对temp_sfp数组中的元素分组,最终生成sfp_group数组,其中每个分组是一个对象,键为指定标识(columnIndex=1对应键"1",columnIndex=0对应键"2"),值为对应分组的元素数组。

输入数据

{
  "temp_sfp": [
    {
      "value": 600,
      "valueOperator": "=",
      "uom": "mcg",
      "name": "Vitamin D (as D3 Cholecalciferol)",
      "percentDvOperator": "=",
      "percentDv": "75.0",
      "columnIndex": 1
    },
    {
      "value": 2,
      "valueOperator": "=",
      "uom": null,
      "name": "Bacillus Coagulans",
      "percentDvOperator": "=",
      "percentDv": null,
      "columnIndex": 1
    },
    {
      "value": 300,
      "valueOperator": "=",
      "uom": "mcg",
      "name": "Vitamin D (as D3 Cholecalciferol)",
      "percentDvOperator": "=",
      "percentDv": "50.0",
      "columnIndex": 0
    },
    {
      "value": 1,
      "valueOperator": "=",
      "uom": "mg",
      "name": "Bacillus Coagulans",
      "percentDvOperator": "=",
      "percentDv": null,
      "columnIndex": 0
    }
  ]
}

期望输出

{
  "sfp_group": [
    {
      "1": [
        {
          "value": 600,
          "valueOperator": "=",
          "uom": "mcg",
          "name": "Vitamin D (as D3 Cholecalciferol)",
          "percentDvOperator": "=",
          "percentDv": "75.0",
          "columnIndex": 1
        },
        {
          "value": 2,
          "valueOperator": "=",
          "uom": null,
          "name": "Bacillus Coagulans",
          "percentDvOperator": "=",
          "percentDv": null,
          "columnIndex": 1
        }
      ]
    },
    {
      "2": [
        {
          "value": 300,
          "valueOperator": "=",
          "uom": "mcg",
          "name": "Vitamin D (as D3 Cholecalciferol)",
          "percentDvOperator": "=",
          "percentDv": "50.0",
          "columnIndex": 0
        },
        {
          "value": 1,
          "valueOperator": "=",
          "uom": "mg",
          "name": "Bacillus Coagulans",
          "percentDvOperator": "=",
          "percentDv": null,
          "columnIndex": 0
        }
      ]
    }
  ]
}

原规则问题分析

你之前尝试的Shift规则存在多层冗余嵌套,@4的回溯层级定位错误,既没有明确指定columnIndex到目标分组键的映射,也没有构建正确的外层数组结构,因此无法生成预期输出。

正确的JOLT转换规则

[
  {
    "operation": "shift",
    "spec": {
      "temp_sfp": {
        "*": {
          "columnIndex": {
            "0": {
              "@2": "sfp_group[1].2[]"
            },
            "1": {
              "@2": "sfp_group[0].1[]"
            }
          }
        }
      }
    }
  }
]

规则解释

  • 遍历temp_sfp数组的每个元素(*通配符匹配所有数组索引)
  • 针对每个元素的columnIndex值,匹配对应的分支:
    • 当columnIndex为0时,用@2回溯到当前元素的完整对象,将其添加到sfp_group[1].2数组中
    • 当columnIndex为1时,将元素添加到sfp_group[0].1数组中
  • 最终生成的sfp_group数组包含两个对象,分别对应两组数据,与期望输出结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:50:57