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

如何处理JSON嵌套数组?实现候选邮箱与应用信息关联转换

解决JSON嵌套数组展开的Jolt Shift规范问题

输入JSON

{
  "Content": [
    {
      "CandidateEmail": "john1@noexist.com",
      "Applications": [
        {
          "ApplicationId": "app1",
          "JobRefNumber": "REF1"
        },
        {
          "ApplicationId": "app2",
          "JobRefNumber": "REF2"
        }
      ]
    },
    {
      "CandidateEmail": "carl2@email.com",
      "Applications": [
        {
          "ApplicationId": "app3",
          "JobRefNumber": "REF3"
        },
        {
          "ApplicationId": "app4",
          "JobRefNumber": "REF4"
        }
      ]
    }
  ]
}

期望输出JSON

[
  {
    "CandidateEmail": "john1@noexist.com",
    "ApplicationId": "app1",
    "JobRefNumber": "REF1"
  },
  {
    "CandidateEmail": "john1@noexist.com",
    "ApplicationId": "app2",
    "JobRefNumber": "REF2"
  },
  {
    "CandidateEmail": "carl2@email.com",
    "ApplicationId": "app3",
    "JobRefNumber": "REF3"
  },
  {
    "CandidateEmail": "carl2@email.com",
    "ApplicationId": "app4",
    "JobRefNumber": "REF4"
  }
]

原有规范的问题

你草拟的shift规范中,使用[&1]作为数组索引,这里的&1指向当前Applications数组的元素索引(每个Candidate下的Applications都是从0开始计数),导致第二个Candidate的Applications元素会覆盖第一个Candidate的同索引元素,最终只能得到2个结果,而非期望的4个。

修正后的Jolt规范

方案一:组合索引+扁平化(清晰直观)

[
  {
    "operation": "shift",
    "spec": {
      "Content": {
        "*": {
          "Applications": {
            "*": {
              "@(2,CandidateEmail)": "[&2_&1].CandidateEmail",
              "ApplicationId": "[&2_&1].ApplicationId",
              "JobRefNumber": "[&2_&1].JobRefNumber"
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "[]"
    }
  }
]
  • 第一步shift:用&2(Content数组的索引)和&1(Applications数组的索引)组合成唯一键名(如0_0、0_1),将每个CandidateEmail与对应Application字段绑定
  • 第二步shift:将所有键对应的对象扁平化到数组中

方案二:自动追加数组项(简洁高效)

[
  {
    "operation": "shift",
    "spec": {
      "Content": {
        "*": {
          "Applications": {
            "*": {
              "@(2,CandidateEmail)": "[#4].CandidateEmail",
              "*": "[#4].&"
            }
          }
        }
      }
    }
  }
]
  • #4表示当前路径中第4个层级的通配符遍历计数(从1开始数:1=根,2=Content,3=Content的*,4=Applications的*),确保每个合并后的对象对应唯一的数组位置
  • *匹配ApplicationId和JobRefNumber字段,直接映射到同数组项的对应键名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:00:16