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

如何使用Jolt Spec实现基于ID匹配的JSON数组合并转换?

Jolt转换:将list1匹配ID的对象替换list2的idList

原始输入JSON

{
   "data":{
      "list1":[
         {
            "id":"1",
            "description":"abc..",
            "title":"abc"
         },
         {
            "id":"2",
            "description":"hello..",
            "title":"hello"
         },
         {
            "id":"3",
            "description":"hello..",
            "title":"hello"
         },
         {
            "id":"4",
            "description":"hello..",
            "title":"hello"
         },
         {
            "id":"5",
            "description":"hello..",
            "title":"hello"
         },
         {
            "id":"6",
            "description":"hello..",
            "title":"hello"
         }
      ],
      "list2":[
         {
            "info":"this is list2",
            "idList":[
               "1",
               "3"
            ]
         },
         {
            "info":"this is list2",
            "idList":[
               "2",
               "4"
            ]
         }
      ]
   }
}

期望输出JSON

{
   "res":{
      "data":[
         {
            "info":"this is list2",
            "idList":[
               {
                  "id":"1",
                  "description":"abc..",
                  "title":"abc"
               },
               {
                  "id":"3",
                  "description":"hello..",
                  "title":"hello"
               }
            ]
         },
         {
            "info":"this is list2",
            "idList":[
               {
                  "id":"2",
                  "description":"hello..",
                  "title":"hello"
               },
               {
                  "id":"4",
                  "description":"hello..",
                  "title":"hello"
               }
            ]
         }
      ]
   }
}

尝试的Jolt Spec(仅保留info字段,未正确合并)

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "list1": {
          "*": {
            "id": {
              "@(3,list2[&].idList)": {
                "@(4,list2[&].idList)": "res.data[&3].idList"
              }
            }
          }
        },
        "list2": {
          "*": {
            "info": "res.data[&1].info"
          }
        }
      }
    }
  }
 ]

正确的Jolt Spec

[
  // 第一步:将list1转换为以id为键的映射,方便后续匹配
  {
    "operation": "shift",
    "spec": {
      "data": {
        "list1": {
          "*": {
            "@": "idMap.@id"
          }
        },
        "data": {
          "list2": "@"
        }
      }
    }
  },
  // 第二步:处理list2,用idMap替换idList中的ID为完整对象,构造目标结构
  {
    "operation": "shift",
    "spec": {
      "data": {
        "list2": {
          "*": {
            "info": "res.data[&1].info",
            "idList": {
              "*": {
                "@(3,idMap.&)": "res.data[&4].idList[&1]"
              }
            }
          }
        }
      }
    }
  },
  // 第三步:移除临时的idMap字段
  {
    "operation": "remove",
    "spec": {
      "idMap": ""
    }
  }
]

说明

  1. 第一步(shift):把list1的每个对象按id存入idMap,形成id: 对象的键值对,后续可通过ID直接引用对应对象。
  2. 第二步(shift):遍历list2的每个元素,保留info字段;同时遍历idList中的每个ID,通过@(3,idMap.&)引用第一步生成的idMap中对应ID的完整对象,替换原ID值。
  3. 第三步(remove):清除临时生成的idMap字段,得到干净的目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:25:09