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

Jolt转换嵌套数组JSON时子数组元素错乱问题求助

Jolt嵌套数组转换元素混淆问题修正方案

问题说明

作为Jolt新手,处理包含嵌套数组的JSON转换时,发现父级的子数组times元素出现跨父级混淆:id为1的对象混入了id为2的times元素,id为2的对象混入了id为1的times元素,预期每个父级对象的timing数组应仅包含自身opening数组对应的元素。

输入JSON

[
  {
    "id": "1",
    "name": "data1",
    "opening": [
      {
        "From": "07:30:01",
        "To": "17:30:01"
      },
      {
        "From": "07:30:02",
        "To": "17:30:02"
      }
    ]
  },
  {
    "id": "2",
    "name": "data2",
    "opening": [
      {
        "From": "07:30:03",
        "To": "17:30:03"
      },
      {
        "From": "07:30:04",
        "To": "17:30:04"
      }
    ]
  }
]

原Jolt转换规则

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "[&1].id",
        "name": "[&1].name",
        "opening": {
          "*": {
            "From": "[&1].timing.[&3].times[0].from",
            "To": "[&1].timing.[&3].times[0].to"
          }
        }
      }
    }
  }
]

预期输出

[ {
  "id" : "1",
  "name" : "data1",
  "timing" : [ {
    "times" : [ {
      "from" : "07:30:01",
      "to" : "17:30:01"
    } ]
  }, {
    "times" : [ {
      "from" : "07:30:02",
      "to" : "17:30:02"
    } ]
  } ]
}, {
  "timing" : [ {
    "times" : [ {
      "from" : "07:30:03",
      "to" : "17:30:03"
    } ]
  }, {
    "times" : [ {
      "from" : "07:30:04",
      "to" : "17:30:04"
    } ]
  } ],
  "id" : "2",
  "name" : "data2"
} ]

当前错误输出

[ {
  "id" : "1",
  "name" : "data1",
  "timing" : [ {
    "times" : [ {
      "from" : "07:30:01",
      "to" : "17:30:01"
    } ]
  }, {
    "times" : [ {
      "from" : "07:30:03",
      "to" : "17:30:03"
    } ]
  } ]
}, {
  "timing" : [ {
    "times" : [ {
      "from" : "07:30:02",
      "to" : "17:30:02"
    } ]
  }, {
    "times" : [ {
      "from" : "07:30:04",
      "to" : "17:30:04"
    } ]
  } ],
  "id" : "2",
  "name" : "data2"
} ]

修正方案

错误原因

原规则中From和To的路径使用了错误的层级引用:[&1].timing.[&3]把当前opening元素的索引当作了父数组的索引,把父元素的索引当作了timing数组的索引,导致不同父级的opening元素被错误映射到其他父级的timing数组中。

修正后的Jolt规则

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "[&1].id",
        "name": "[&1].name",
        "opening": {
          "*": {
            "From": "[&3].timing.[&1].times[0].from",
            "To": "[&3].timing.[&1].times[0].to"
          }
        }
      }
    }
  }
]

规则解释

  • [&3]:在opening的子元素层级,引用最外层父元素的索引,确保每个父级对象的属性被映射到自身数组位置
  • [&1]:引用当前opening数组元素的索引,确保每个opening元素被映射到当前父级timing数组的对应位置

这样每个父级对象的opening数组元素会被正确映射到自身的timing数组中,不会出现跨父级混淆。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:20:28