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

JOLT转换技术咨询:如何将外层属性分散至数组子对象并为列表元素添加指定字段

解决JOLT转换中为列表元素添加关联字段的问题

我明白你现在的困惑——要把code字段和detail数组里的每个num一一对应,生成新的对象数组对吧?咱们一步步来解决。

你的输入数据

{ 
  "results": 1, 
  "data": [ 
    { 
      "detail": [ 
        { "num": "140" }, 
        { "num": "158" }, 
        { "num": "180" }, 
        { "num": "183" }, 
        { "num": "213" } 
      ], 
      "code": "01007" 
    } 
  ], 
  "response_code": 200 
}

期望输出

[ 
  { "code": "01007", "num": "140" }, 
  { "code": "01007", "num": "158" }, 
  { "code": "01007", "num": "180" }, 
  { "code": "01007", "num": "183" }, 
  { "code": "01007", "num": "213" } 
]

你现有Spec的问题

你当前的shift操作里,尝试用"code": "[&1].code"来关联,但这里的&1指向的是detail数组的索引,而code字段是在detail的父级对象里,所以没法直接拿到这个值,需要用更高层级的索引来引用。

正确的JOLT转换Spec

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": { // 遍历data数组里的每个对象(这里只有一个)
          "code": "&1.detail.*.code", // 将code赋值给detail数组每个元素对应的code字段
          "detail": {
            "*": { // 遍历detail数组里的每个num对象
              "@": "[&3]" // 将当前的num对象放到新数组的对应位置,&3指向最外层data数组的索引,最终形成数组
            }
          }
        }
      }
    }
  }
]

关键步骤解释

  1. "code": "&1.detail.*.code":这里的&1代表当前层级(data数组的元素层级),我们把code的值映射到该元素下detail数组的每一个元素的code字段上,相当于给每个num对象都带上对应的code。
  2. "@": "[&3]":&3是回溯到最外层data数组的索引(从detail的元素往上数3层:detail元素 → detail数组 → data元素 → data数组),这样每个num对象(带上了刚才的code)都会被放到同一个数组里,就得到了你想要的结构。

如果你的data数组里有多个对象,这个Spec也能正常工作,每个对象的code会和自己的detail数组元素一一对应哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:44:09