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

如何移除Jolt转换输出中的null条目

Jolt转换后数组出现null条目,修正方案

问题场景

输入JSON、原Jolt规则、原输出、期望输出如下:

输入JSON

{
  "node": {
    "3": [
      {
        "name": "name3"
      },
      {
        "shutdown": false
      }
    ],
    "6": [
      {
        "name": "name6"
      },
      {
        "shutdown": false
      }
    ]
  }
}

原Jolt规则

[
  {
    "operation": "shift",
    "spec": {
      "node": {
        "*": {
          "$": "node.[&1].id",
          "*": {
            "name": "node.[&2].name",
            "shutdown": "node.[&2].shutdown"
          }
        }
      }
    }
  }
]

原输出(含null冗余)

{
  "node" : [ null, null, null, {
    "id" : "3",
    "name" : "name3",
    "shutdown" : false
  }, null, null, {
    "id" : "6",
    "name" : "name6",
    "shutdown" : false
  } ]
}

期望输出

{
  "node" : [ 
 {
    "id" : "3",
    "name" : "name3",
    "shutdown" : false
  }, 
  {
    "id" : "6",
    "name" : "name6",
    "shutdown" : false
  } ]
}

问题原因

原规则中"$": "node.[&1].id"的&1会把原node对象的键("3"、"6")当作数组索引使用,Jolt会自动填充索引0-2、4-5的位置为null,产生冗余空位。实际需求是按遍历顺序生成连续数组,而非按键值作为索引。

修正后的Jolt规则

推荐两种简洁的实现方式:

方式一:利用自动数组追加([])和最后元素引用(-1)

[
  {
    "operation": "shift",
    "spec": {
      "node": {
        "*": {
          // 将当前键值作为id,追加到node数组的新元素中
          "$": "node[].id",
          // 提取第一个子对象的name到刚创建的数组元素
          "[0]": {
            "name": "node[-1].name"
          },
          // 提取第二个子对象的shutdown到同一个数组元素
          "[1]": {
            "shutdown": "node[-1].shutdown"
          }
        }
      }
    }
  }
]

方式二:利用计数索引(#)指定连续位置

[
  {
    "operation": "shift",
    "spec": {
      "node": {
        "*": {
          // #2 表示当前*的遍历计数(从0开始),对应数组的连续索引
          "$": "node[#2].id",
          "*": {
            // #3 对应外层*的计数,确保name/shutdown落到同一数组元素
            "name": "node[#3].name",
            "shutdown": "node[#3].shutdown"
          }
        }
      }
    }
  }
]

效果验证

两种规则转换后均会输出期望的连续数组,无null冗余条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:04:57