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

如何用单条JOLT规则将多层级元素转为数组(含单个元素场景)?

JOLT转换:递归收集指定元素并始终返回数组

问题描述

需要递归遍历JSON所有层级,收集所有foo.nn字段的值到数组中,且无论匹配到1个还是多个元素,结果始终是数组结构,同时无需预先知晓JSON的层级深度。

输入示例

{
  "id": 1,
  "item": [
    {
      "id": "1_1",
      "foo": {
        "id": 1232,
        "nn": "sdfsd"
      }
    }
  ]
}

预期输出

{
  "type": ["sdfsd"]
}

解决方案

使用JOLT的shift操作,结合递归通配符和数组目标语法实现需求:

[
  {
    "operation": "shift",
    "spec": {
      "**": { // 递归匹配所有层级的节点
        "foo": {
          "nn": "type[]" // 用type[]强制将值存入数组
        }
      }
    }
  }
]

规则解释

  1. **递归通配符:匹配JSON中任意层级的所有节点,无需硬编码多层item结构,自动处理未知深度的嵌套。
  2. type[]数组目标:JOLT中,当目标字段名后跟[]时,无论匹配到1个还是多个值,都会将结果包装为数组,避免单个值时输出字符串。

验证结果

针对上述输入,执行规则后输出与预期完全一致;若输入包含多个foo.nn值(比如多层嵌套的item里的foo),所有值都会被收集到type数组中。

原规则问题分析

  • 硬编码多层item结构,无法适配未知深度的JSON;
  • 使用type作为目标字段,单个匹配值时JOLT会输出字符串而非数组,多个值时才自动转为数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:50:25