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

使用Jolt转换含子数组的JSON为带父属性的父元素数组

Jolt转换:将嵌套JSON数组展开为含完整父属性的数组

需求

将包含多层子数组的JSON转换为数组,每个数组元素对应原JSON中的一个Employee对象,同时完整保留其所属的Transmission和Employer层级属性。

输入JSON

{
    "Transmission": {
        "TransmissionGUID": "transId1",
        "Employer": [
            {
                "EmployerPartyID": "employerId1",
                "Employee": [
                    {
                        "EmployeeGenderCode": "M",
                        "MaritalStatusCode": "Married"
                    },
                    {
                        "EmployeeGenderCode": "F",
                        "MaritalStatusCode": "UnMarried"
                    }
                ]
            },
            {
                "EmployerPartyID": "employerId2",
                "Employee": [
                    {
                        "EmployeeGenderCode": "M2",
                        "MaritalStatusCode": "Married2"
                    },
                    {
                        "EmployeeGenderCode": "F2",
                        "MaritalStatusCode": "UnMarried"
                    }
                ]
            }
        ]
    }
}

期望输出JSON

[
    {
        "Transmission": {
            "TransmissionGUID": "transId1",
            "Employer": [
                {
                    "EmployerPartyID": "employerId1",
                    "Employee": [
                        {
                            "EmployeeGenderCode": "M",
                            "MaritalStatusCode": "Married"
                        }
                    ]
                }
            ]
        }
    },
    {
        "Transmission": {
            "TransmissionGUID": "transId1",
            "Employer": [
                {
                    "EmployerPartyID": "employerId1",
                    "Employee": [
                        {
                            "EmployeeGenderCode": "F",
                            "MaritalStatusCode": "UnMarried"
                        }
                    ]
                }
            ]
        }
    },
    {
        "Transmission": {
            "TransmissionGUID": "transId1",
            "Employer": [
                {
                    "EmployerPartyID": "employerId2",
                    "Employee": [
                        {
                            "EmployeeGenderCode": "M2",
                            "MaritalStatusCode": "Married2"
                        }
                    ]
                }
            ]
        }
    },
    {
        "Transmission": {
            "TransmissionGUID": "transId1",
            "Employer": [
                {
                    "EmployerPartyID": "employerId2",
                    "Employee": [
                        {
                            "EmployeeGenderCode": "F2",
                            "MaritalStatusCode": "UnMarried"
                        }
                    ]
                }
            ]
        }
    }
]

尝试的Jolt Spec(无效)

[
    {
      "operation": "shift",
      "spec": {
        "Transmission": {
          "Employer": {
            "*": {
              "Employee": {
                "*": {
                    "@(4,TransmissionGUID)": "[].Transmission.TransmissionGUID",
                    "@(2,EmployerPartyID)": "[].Transmission.Employer[].EmployerPartyID",
                  "@": "[].Transmission.Employer[].Employee[]"
                }
              }
            }
          }
        }
      }
    }
]

问题分析

原Spec的核心问题是使用[]作为数组索引时,会将所有属性追加到同一个数组元素中,无法为每个Employee生成独立的对象条目;同时Employee[]会将多个员工对象塞到同一个数组里,不符合期望输出的单元素数组结构。

修正后的Jolt Spec

[
  {
    "operation": "shift",
    "spec": {
      "Transmission": {
        // 临时存储顶层TransmissionGUID
        "TransmissionGUID": "temp_trans_guid",
        "Employer": {
          "*": {
            // 按Employer索引存储对应的EmployerPartyID
            "EmployerPartyID": "temp_employer_id[&1]",
            "Employee": {
              "*": {
                // 用Employer索引(&3)和Employee索引(&1)组合生成唯一数组键,确保每个Employee对应独立条目
                "@(4,temp_trans_guid)": "[&3_&1].Transmission.TransmissionGUID",
                "@(2,temp_employer_id[&3])": "[&3_&1].Transmission.Employer[0].EmployerPartyID",
                // 将当前Employee对象放入单元素数组
                "@": "[&3_&1].Transmission.Employer[0].Employee[0]"
              }
            }
          }
        }
      }
    }
  },
  // 清理临时变量
  {
    "operation": "remove",
    "spec": {
      "temp_trans_guid": "",
      "temp_employer_id": ""
    }
  }
]

说明

  1. 临时存储:先把顶层的TransmissionGUID和每个Employer的EmployerPartyID存入临时变量,方便后续引用。
  2. 唯一索引:通过&3_&1(&3是当前Employer的数组索引,&1是当前Employee的数组索引)生成唯一的数组键,确保每个Employee对应一个独立的输出对象。
  3. 单元素数组:将Employer和Employee都处理为单元素数组,完全匹配期望输出的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:32:11