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

Jolt转换嵌套数组异常:输入3条数据输出6条求排查

Jolt转换出现重复条目问题解决

问题根因

你遇到的输出条目从3条变6条,本质是两个嵌套数组的笛卡尔积问题:当Jolt规范中同时对files.file和attributes.attribute这两个数组进行数组层级的映射时,Jolt会将每个listing下的file元素和attribute元素做全组合匹配,最终生成的条目数是file数量 × attribute数量,导致原本的3条listing被扩展翻倍。

修正思路

要避免笛卡尔积,必须把嵌套数组的处理限制在单个listing的上下文内:先遍历顶层的listing数组,再在每个listing内部分别处理files.file和attributes.attribute,不让两个数组的遍历逻辑交叉触发。

示例修正方案

假设你的输入JSON是XML转换后的典型结构:

{
  "listings": {
    "listing": [
      {
        "id": "1",
        "files": {
          "file": [{"name": "a.jpg"}]
        },
        "attributes": {
          "attribute": [
            {"@attributes": {"key": "color", "value": "red"}}
          ]
        }
      },
      {
        "id": "2",
        "files": {
          "file": [{"name": "b.png"}]
        },
        "attributes": {
          "attribute": [
            {"@attributes": {"key": "size", "value": "L"}}
          ]
        }
      },
      {
        "id": "3",
        "files": {
          "file": [{"name": "c.pdf"}]
        },
        "attributes": {
          "attribute": [
            {"@attributes": {"key": "type", "value": "doc"}}
          ]
        }
      }
    ]
  }
}

对应的正确Jolt规范如下:

[
  {
    "operation": "shift",
    "spec": {
      "listings": {
        "listing": {
          "*": {
            // 保留listing顶层字段
            "id": "[&1].id",
            // 处理files数组,将内容归属到当前listing下
            "files": {
              "file": {
                "*": {
                  "@": "[&3].files[&1]"
                }
              }
            },
            // 处理attributes数组,提取@attributes并归属到当前listing下
            "attributes": {
              "attribute": {
                "*": {
                  "@attributes": "[&3].attributes[&1]"
                }
              }
            }
          }
        }
      }
    }
  }
]

规范关键说明

  • [&1] 指代顶层listing数组的索引,确保每个处理结果对应原输入的单个listing
  • [&3] 在处理嵌套数组时,通过层级回溯(file → files → 当前listing)定位到原listing的索引,保证files和attributes都归属到同一个条目下
  • 分开处理两个嵌套数组,避免遍历逻辑交叉产生笛卡尔积

验证效果

修正后的输出会严格保留3条listing,每条包含对应的files和attributes数据,不会出现重复条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:41:00