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

JOLT转换后数组出现null值的原因及消除方法咨询

JOLT转换中null值的产生原因及解决方法

问题描述

输入数据

{
  "data": [
    {
      "val": 0,
      "fechaOffsetLocal": "2023-04-26T00:05:00",
      "TicketId": 49562693,
      "MedicionId": "80041",
      "utc": -6
    },
    {
      "val": 0,
      "fechaOffsetLocal": "2023-04-26T00:10:00",
      "TicketId": 49562693,
      "MedicionId": "80042",
      "utc": -6
    }
  ]
}

转换规格(SPEC)

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "val": "@(1,MedicionId)[&1].&",
          "fechaOffsetLocal": "@(1,MedicionId)[&1].&",
          "utc": "@(1,MedicionId)[&1].&"
        }
      },
      "TicketId": "TicketId"
    }
  }
]

转换后输出

{
  "80041": [
    {
      "val": 0,
      "fechaOffsetLocal": "2023-04-26T00:05:00",
      "utc": -6
    }
  ],
  "80042": [
    null,
    {
      "val": 0,
      "fechaOffsetLocal": "2023-04-26T00:10:00",
      "utc": -6
    }
  ]
}

null值产生的原因

你的shift规格中,[&1]引用的是当前data数组的元素索引(第一个元素索引为0,第二个为1)。当处理第二个data元素(MedicionId=80042)时,你指定将字段放到80042[1]的位置,这会强制创建一个长度为2的数组,而索引0的位置没有对应的数据填充,JOLT会自动用null补全这个空位置。

第一个元素(MedicionId=80041)使用的是索引0,数组仅需填充该位置,因此不会出现null。

如何移除/避免null值?

方案1:调整shift路径,避免指定固定数组索引

把[&1]改成[],这样每个MedicionId对应的数组只会追加当前元素,不会因为强制指定索引生成空位置:

修改后的SPEC:

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "val": "@(1,MedicionId)[].&",
          "fechaOffsetLocal": "@(1,MedicionId)[].&",
          "utc": "@(1,MedicionId)[].&"
        }
      },
      "TicketId": "TicketId"
    }
  }
]

转换后输出:

{
  "80041": [
    {
      "val": 0,
      "fechaOffsetLocal": "2023-04-26T00:05:00",
      "utc": -6
    }
  ],
  "80042": [
    {
      "val": 0,
      "fechaOffsetLocal": "2023-04-26T00:10:00",
      "utc": -6
    }
  ],
  "TicketId": 49562693
}

方案2:直接映射为对象(无需数组结构)

如果每个MedicionId仅对应一个对象,可以去掉数组标识[],直接映射:

修改后的SPEC:

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "val": "@(1,MedicionId).&",
          "fechaOffsetLocal": "@(1,MedicionId).&",
          "utc": "@(1,MedicionId).&"
        }
      },
      "TicketId": "TicketId"
    }
  }
]

转换后输出:

{
  "80041": {
    "val": 0,
    "fechaOffsetLocal": "2023-04-26T00:05:00",
    "utc": -6
  },
  "80042": {
    "val": 0,
    "fechaOffsetLocal": "2023-04-26T00:10:00",
    "utc": -6
  },
  "TicketId": 49562693
}

方案3:用remove操作清理已生成的null值

如果无法修改shift逻辑,可以在后续添加remove操作,移除数组中的null元素:

修改后的SPEC:

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "val": "@(1,MedicionId)[&1].&",
          "fechaOffsetLocal": "@(1,MedicionId)[&1].&",
          "utc": "@(1,MedicionId)[&1].&"
        }
      },
      "TicketId": "TicketId"
    }
  },
  {
    "operation": "remove",
    "spec": {
      "*": {
        "null": ""
      }
    }
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:48:14